poj1990(樹狀陣列好題)

2021-06-23 03:08:39 字數 890 閱讀 8392

思路請參考:

下面是我的**:

#include#include#include#include#include#include#include#include#include#include#include#define ll __int64

#define n 20005

#define inf 0x7ffffff

#define eps 1e-9

#define pi acos(-1.0)

using namespace std;

struct node

s[n];

int c[n],countt[n];//c是樹狀陣列,countt[i]記錄比音量比i小下標比牛i小的牛的個數

int total[n];//total[i]表示音量比牛i小的牛且下標比牛i小的牛的下標和

int alltotal[n];//alltotal[i]表示音量比牛i小的牛的下標和

bool cmp(node a,node b)

int lowbit(int x)

void update(int x, int v)

int sum(int x)

int main()

memset(c,0,sizeof(c));

memset(total,0,sizeof(total));

for(i = 0; i < n; i++)

ll ans = 0;

memset(alltotal,0,sizeof(alltotal));

for(i = 1; i < n; i++)

alltotal[i] = alltotal[i-1] + s[i-1].x;

for(i = 1; i < n; i++)

{//cout<

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...

POJ1990 樹狀陣列)

對於樹狀陣列的理解不透 不會轉化 題解 顯然是要按照v排序的,那麼首先在on情況下是可以完成max vi,vj 的操作,對於某個牛i,我們只需考慮i之前的,那麼i之前的牛我們需要知道每只牛j abs dis i dis j 去掉絕對值後,我們只需要知道所有dis j dis i 的牛的x的和 sum...