POJ 2481 Cows 線段樹 樹狀陣列

2021-07-09 20:14:46 字數 998 閱讀 6065

給出n個區間

輸出每個區間  是多少個區間的真子集  

思路:區間左端點為第一關鍵字,右端點第二關鍵字,前者公升序後者降序

這樣對每個區間i,只需要查詢 ri到n有多少個右端點就是答案,  可能有好幾個區間相同,那麼預處理一下最後減掉完全相同的區間即可

#include #include #include #include #include #include #include #include #include #include using namespace std;

const long long maxn = 100005;

struct tree

void pushup(int rt)

void update(int l,int r,int num,int rt,int val)

int mid=(l+r)/2;

if (num<=mid)

update(l,mid,num,rt<<1,val);

else

update(mid+1,r,num,rt<<1|1,val);

pushup(rt);

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

};tree tp;

struct node

;node tm[100005];

bool cmp(const node &a,const node &b)

int ans[100005];

int main( )

sort(tm+1,tm+1+n,cmp);

for (i=n; i>=1; i--)

int tol=i-j-1;

tm[i].num=tol;

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

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

printf("\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 樹狀陣列or線段樹

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

poj 2481 Cows 樹狀陣列or線段樹

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