POJ - 2352 stars
树状数组简单题。一维排个序,另一维加树状数组里就可以搞了。
//Twenty
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<queue>
#include<vector>
const int maxn=32000+29;
int n,sum[maxn],ans[maxn],now;
struct node{
int l,r;
friend bool operator <(const node&A,const node&B){
return A.l==B.l?A.r<B.r:A.l<B.l;
}
}a[maxn];
using namespace std;
int qry(int x) {
int res=0;
for(int i=x;i>=1;i-=(i&(-i)))
res+=sum[i];
return res;
}
void add(int x,int v) {
for(int i=x;i<=maxn;i+=(i&(-i)))
sum[i]+=v;
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d%d",&a[i].l,&a[i].r);
sort(a+1,a+n+1);
for(int i=1;i<=n;i++){
now=qry(a[i].r+1);
ans[now]++;
add(a[i].r+1,1);
}
for(int i=0;i<n;i++) printf("%d\n",ans[i]);
return 0;
}