poj2481樹狀陣列

2021-07-22 06:37:03 字數 943 閱讀 1028

每個牛有乙個區間[s,e],兩個牛[s1,e1], [s2,e2],當s1<=s2並且e1>=e2並且e1-s1>e2-s2時,我們說牛1比牛2強,給n個牛的區間,對於每個牛,輸出比這個牛強的牛的個數。

還是需要預處理,先對每個牛的e進行降序排序,e相同時對s進行公升序排列,這樣迴圈時可以保證後邊的牛絕對不比前邊的牛強。在迴圈時,只需找出比當前牛s小的牛的個數。如果遇到特殊情況,即兩個牛區間完全一樣,賦值就可以了

#include 

#include

#include

#include

using

namespace

std;

const

int maxn=100005;

int b[maxn];

int c[maxn];

int n;

struct cow

a[maxn];

int cmp(const cow &a,const cow &b)

int lowbit(int x)

void update(int x,int add)

}int sum(int x)

return ret;

}int main()

sort(a,a+n,cmp);

for(int i=0;iif(i&&a[i].l==a[i-1].l&&a[i].r==a[i-1].r)

b[a[i].dis]=b[a[i-1].dis];

else

b[a[i].dis]=sum(a[i].l);

update(a[i].l,1);

}for(int i=0;i1;i++)

printf("%d ",b[i]);

printf("%d\n",b[n-1]);

}return

0;}

poj 2481(樹狀陣列)

這題樹狀陣列明顯可解,不解釋,但是注意有相同的奶牛的處理 include include include include define n 100005 using namespace std int c n tem struct dian d n int cmp dian a,dian b int...

poj 2481 樹狀陣列

解法2 按si值做降序排序後,相當於求每個位置i左邊大於等於e i 的個數 樹狀陣列更新節點的路徑和求和的路徑要改變,getsum i 相當於求i i 1 maxn include include using namespace std const int maxn 100010 int sum m...

POJ2481 樹狀陣列

題意 給n個節點的s和e,求對於每個節點,其他節點和它的關係滿足si sj and ej ei and ei si ej sj 的個數 題解 由於e的關係遞減,s的關係遞增,因此可以先對e排序,然後利用樹狀陣列更新並查詢每個sj在其之前的si的個數就是問題的解 include include inc...