#include<algorithm> #include<iostream> using namespace std; int C[32001];//数状数组 int Out[15001];//输出结果,Out[i]表示level i的星星个数 int N = 32001;//星星个数 //C[i] = a[i – 2^k + 1] + … + a[i],k为i在二进制下末尾0的个数。 int Lowbit(int x) { return x&(x^(x-1)); } //修改树状数组,往原数组的i元素加x void Modify(int i,int x) { while(i<=N) { C[i] += x; i += Lowbit(i); } } //1..n求和 int Sum(int n) { int sum=0; while(n>0) { sum += C[n]; n -= Lowbit(n); } return sum; } int main() { int n; scanf("%d",&n); int i; int x,y; for(i=1;i<=n;++i) { scanf("%d%d",&x,&y); x += 1; Modify(x,1); Out[Sum(x)-1]++;//因为Sum(x)包括了x,所以Out[Sum(x) - 1] 表示level为Sum(x) - 1的星星的个数 } for(i = 0; i < n; ++i) printf("%d\n",Out[i]); return 0; }