題意:
給了n個線段(n<=10000),現在請輸出每個線段被多少個線段包圍了。
[l,r]要包圍線段[l,r]…則l<=l && r>=l && r-l > r-l。
思路:先將這些線段排序,左端點公升序,右端點降序。
排完以後,前面的左端點肯定不會比後面的大,要想包圍,就看右端點是否比後面大。這樣把右端點單獨拿出來作為乙個序列。能包圍它的一定排在它的前面而且其右端點較大,也就是乙個逆序。
要注意區間相等的情況。單獨統計出來,等下乙個不相等區間出現時才把之前儲存下來的區間右端點進行插入。
#include #include #include #include #pragma comment(linker, "/stack:102400000,102400000")
typedef long long ll;
const int inf = 0x3f3f3f3f;
const int maxn = 1e5+5;
using namespace std;
int n,m;
int c[maxn], ans[maxn];
struct node
}nodes[maxn];
inline int lowbit(int x)
void add(int x, int v)
int sum(int x)
int main()
sort(nodes+1, nodes+n+1);
for(int i = 1; i <= n; ++i)
for(int i = 1; i < n; ++i) printf("%d ", ans[i]);
printf("%d\n", ans[n]);
} fclose(stdin);
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從大到小排序,這樣保證遍歷時後出現的牛的上界一定滿足小於等於前面的,這樣只需要判斷他的下界滿不滿足就行,這就想到了用樹狀陣列。...