标签:
Time Limit: 3000MS | Memory Limit: 65536K | |
Total Submissions: 15405 | Accepted: 5133 |
Description
Input
Output
Sample Input
3 1 2 0 3 3 4 0
Sample Output
1 0 0
题意:统计每个区间是多少个区间的真子集。
#include"cstdio" #include"cstring" #include"algorithm" using namespace std; const int MAXN=100005; struct Node{ int S,E; int index; }cows[MAXN]; bool comp(const Node &a,const Node &b) { if(a.E==b.E) return a.S < b.S; else return a.E > b.E; } int bit[MAXN]; void add(int i,int x) { while(i<MAXN) { bit[i]+=x; i+=i&(-i); } } int sum(int i) { int s=0; while(i>0) { s+=bit[i]; i-=i&(-i); } return s; } int res[MAXN]; int main() { int n; while(scanf("%d",&n)!=EOF&&n!=0) { memset(bit,0,sizeof(bit)); memset(res,0,sizeof(res)); for(int i=0;i<n;i++) { scanf("%d%d",&cows[i].S,&cows[i].E); cows[i].S++;// 存在 0 cows[i].E++; cows[i].index=i; } sort(cows,cows+n,comp); add(cows[0].S,1); for(int i=1;i<n;i++) { if(cows[i].E==cows[i-1].E&&cows[i].S==cows[i-1].S) { res[cows[i].index]=res[cows[i-1].index]; } else { res[cows[i].index]=sum(cows[i].S); } add(cows[i].S,1); } for(int i=0;i<n-1;i++) { printf("%d ",res[i]); } printf("%d\n",res[n-1]); } return 0; }
标签:
原文地址:http://www.cnblogs.com/program-ccc/p/5138612.html