树状数组解决这种偏序问题是很厉害的!
/* 输入按照y递增,对于第i颗星星,它的level就是之前出现过的星星中,横坐标小于i的总数 */ #include<iostream> #include<cstring> #include<cstdio> #include<algorithm> using namespace std; #define maxn 32200 int bit[maxn],n; void add(int i){ while(i<=maxn){ bit[i]+=1; i+=i&-i; } } int sum(int i){ int s=0; while(i>0){ s+=bit[i]; i-=i&-i; } return s; } int main(){ int x,y; int ans[maxn]; while(scanf("%d",&n)==1){ memset(ans,0,sizeof ans); memset(bit,0,sizeof bit); for(int i=1;i<=n;i++){ scanf("%d%d",&x,&y); ++x;//x不可为0 ans[sum(x)]++; add(x); } for(int i=0;i<n;i++) printf("%d ",ans[i]); } }