POJ2481 Cows 樹狀陣列

2021-07-08 16:50:46 字數 809 閱讀 3786

這題的意思是求區間覆蓋問題(si <= sj andej <= eiand ei - si > ej - sj),求區間比當前區間大的個數。

先按照s,e中的e從大到小排序,如果e相等,則按照s從小到大排序(聯想區間定義,右區間要大於當前值,左區間要小於當前值),滿足後用樹狀陣列乙個個插入求前面的個數即可

#include

#include

#include

#define maxn 100005

int n,max;

int c[maxn],ans[maxn];

struct node

a[maxn];

int cmp(const

void*p1, const

void*p2)

int lowbit(int k)

void update(int t)

int getsum(int t)

int main()

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

qsort(a + 1, n, sizeof(a[0]), cmp);//qsort函式的補缺陷法

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

else

update(a[i].s + 1);//這裡要放到外面來,相同的c還是會增加

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

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

printf("\n");

}return

0;}

POJ 2481 Cows 樹狀陣列

樹狀陣列 其實這題和 poj 2352 或者 就是道用樹狀陣列求逆序數的題目。先排序,我的排序是按照先s從小到大,如果s相等 e從大到小。貌似也沒什麼了。就樹狀陣列吧。include include include include include define inf 0x7fffffff defi...

poj 2481 Cows (樹狀陣列)

小記 之前沒做什麼修改之前,在poj上提交1393ms ac了。然後在hdu的web diy裡提交gnu c 超時了 於是不斷的改,在輸出的地方花費時間太多了。就是為了保證每兩個數之間有乙個空格,然後末尾沒有空格,我在for裡面加了乙個判斷,只要不是末尾就輸出乙個空格。然後就這樣超時了。樹狀陣列全用...

poj 2481 Cows(樹狀陣列)

題意 山坡上長滿三葉草,給定一群牛和他們喜愛的範圍 s,ei 如果一頭牛的s小於等於另一頭牛而e大於等於另一頭牛的,且s和e不同時相等,那麼這頭牛就比另一頭牛強壯。可以先對e從大到小排序,這樣保證遍歷時後出現的牛的上界一定滿足小於等於前面的,這樣只需要判斷他的下界滿不滿足就行,這就想到了用樹狀陣列。...