傳送門
題意:給出牛的耳聾程度和牛所在的位置,之後求出每兩個牛所能聽到對方的聲音的和,每兩個牛的計算公式為max(vi,vj)*|xi-xj|
題解:首先暴力肯定是不行的,那麼可以按照牛的音量進行從小到大排序,然後維護兩個樹狀陣列,乙個維護此位置之前之後的牛的個數,另乙個維護此位置之前之後的牛的位置之和,之後求和即可.
附上**:
#include#include#includeusing namespace std;
typedef long long ll;
const int maxn=2e4+50;
paircow[maxn];
int n;
ll cnt[maxn],dis[maxn];
int lowbit(int i)
ll sum(ll *bit,int i)
return res;
}ll sum(ll *bit,int from,int to)
void add(ll *bit,int i,ll x)
}int main()
sort(cow,cow+n);
ll ans=0;
for(int i=0;iprintf("%lld\n",ans);
return 0;
}
MooFest POJ 1990 樹狀陣列)
最近學習了一下樹狀陣列,這道題糾結了很久,終究是因為沒有明白樹狀陣列怎麼用。感覺網上許多大神都只是講原理,對於我們這些初學的菜鳥恐怕都被嚇跑了。這裡我就以實用主義說一下使用方法 其實我覺得其原理應該能對我們更有啟發,也許會帶來很多潛在的好處 這裡需要注意的是,bit的實現 中的bit陣列一開始必須清...
poj 1990 樹狀陣列
開始對距離排序 然後果斷的tle了 然後發現應該對power排序,然後我們記錄和更新的是 比x小的個數與距離和,然後每次算的時候,因為按power排序了,當前的pi一定是最大的,所以就能在logdistance的時間內算出來 ac 如下 include include include include...
POJ 1990(樹狀陣列)
題目 一開始咋都想著得n n,畢竟pair在那擱著來,看了題解才知道原來可以用樹狀陣列 對於每個cow i 來說,由它的v i 決定的有兩部分,左邊部分和右邊部分,如果把cow關於v公升序排列,逐個求得由每個cow i 決定的volume,就可以復用前面的計數了 include include in...