POJ 2481 Cows (線段樹單點更新)

2022-08-15 06:45:10 字數 795 閱讀 3086

題目大意:給n個區間,對於任意乙個區間,求出能完全包含它並且長度比它長的區間的個數。

題目分析:將乙個區間視為二位座標系中的乙個點,左端點視作橫座標,右端點視作縱座標。則題目變成了求每個點的左上方、正左方、正上方點的個數。將所有座標先按縱座標從大到小、再按橫座標從小到大排序。按順序便利所有座標,滿足橫座標比當前座標小或者滿足橫座標不比當前橫座標大並且縱座標比當前縱座標大的點都是要找的點。用線段樹維護即可,也可以用樹狀陣列。

**如下:

# include# include# include# include# includeusing namespace std;

# define ll long long

const int n=100000;

const int inf=10000000;

struct coord

};coord c[n+5];

int ans[n+5];

int tr[n*4+5];

int vis[n+5];

void update(int rt,int l,int r,int x)

else

}int query(int rt,int l,int r,int l,int r)

int main()

sort(c,c+n);

vis[0]=0;

for(int i=1;ifor(int i=0;ifor(int i=0;iprintf("%d%c",ans[i],(i==n-1)?'\n':' ');

} return 0;

}

POJ 2481 Cows(線段樹單點更新)

兩個區間 si,ei 和 sj,ej 0 s e 10 5 若 si sj,且 ej ei 且 ei si ej sj,則第i個區間覆蓋第j個區間,即牛i比牛j強壯。問對於每一頭牛i有多少頭牛比它強壯。這題先一看,不知如何下手。首先,將每個區間的s和e當做是 s,e 乙個點,這樣子把所有點在座標系上...

POJ 2481 Cows 線段樹 樹狀陣列

給出n個區間 輸出每個區間 是多少個區間的真子集 思路 區間左端點為第一關鍵字,右端點第二關鍵字,前者公升序後者降序 這樣對每個區間i,只需要查詢 ri到n有多少個右端點就是答案,可能有好幾個區間相同,那麼預處理一下最後減掉完全相同的區間即可 include include include incl...

poj 2481 Cows 樹狀陣列or線段樹

題意 給n個區間,問第i個區間是多少個區間的子區間。分析 可以吧每乙個線段看成是乙個點,這樣的話就等價於問乙個點的左上方有多少個點?這樣就和stars那題一樣了。因為是求左上方有多少個點,那麼把所有點按照y從大到小排列,這樣就可以按照順序求出0 x之間有多少個點,就是它左上方的點了。需要重點的處理。...