給出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之間有多少個點,就是它左上方的點了。需要重點的處理。...