题目链接
天文学家经常研究星图,星图上的星星由平面上的点表示,每颗星星都有笛卡尔坐标。一颗星星的等级是指该星星左下方的星星的数量.

例如,查看上图所示的地图,5号星的等级为3(左下方有1、2、4号星),2号星和4号星的等级为1。在这张地图上有一颗0级的星星,两颗1级的星星,一颗2级的星星,和一颗3级的星星。
你需要写一个程序来计算给定星图上每个等级的星星数量

Input
输入的第一行包括了星星的数量N (1<=N<=15000),下面N行描述了每颗星星的坐标(每一行由一个空格分隔两个整数X和Y组成, 0<=X,Y<=32000)。每一个点只会存在一颗星星。星星以Y坐标的升序排列。Y坐标相等的恒星按X坐标的升序排列。

Output
输出应该包括N行,每行一个数字。第一行为等级是0级的星星数量,第二行为等级是1级的星星数量,以此类推,最后一行为等级是N-1级的星星数量。

Sample Input
5
1 1
5 1
7 1
3 3
5 5

Sample Output
1
2
1
1
0

//树状数组
#include<stdio.h>
#include<iostream>
#include<string.h>
#include<algorithm>
using namespace std;
#define MAX 500010
#define ll long long
int c[MAX];
int num[MAX];
int n;
int lowbit(int x)//
{
    return x&(-x);
}
//void update(int x,int val)//修改
//{
//    while(x<=n){
//        c[x]+=val;
//        x+=lowbit(x);
//    }
//}
//update(a[i],1);
void update(int x)
{
    while(x<=MAX)
    {
           c[x]++;//val变为1;
        x+=lowbit(x);
    }
}
void update(int x)//修改
{
    for(int j=x; j<=; j+=lowbit(j))
    {
        c[j]++;
    }
}
int sum(int k)//求和
{
    int ans=0;
    for(int i=k; i>0; i-=lowbit(i))
    {
        ans+=c[i];
    }
    return ans;
}
int sum(int x)//节点   求值
{
    int s=0;
    while(x)
    {
        s+=c[x];
        x-=lowbit(x);
    }
    return s;
}
bool cmp(node a,node b){//排序
    return a.val<b.val;
}
int main()
{
    while(scanf("%d",&n)==1&&n)
    {
        int x,y;
        memset(c,0,sizeof(c));
        memset(num,0,sizeof(num));
        for(int i=1; i<=n; i++)
        {
            scanf("%d%d",&x,&y);
            x++;//
            num[sum(x)]++;
            update(x);
        }
        for(int i=0; i<n; i++)
            printf("%d\n",num[i]);
    }
    return 0;
}