每个星星按照纵坐标升序的方式给出,每个星星左下方(包括正左,和正下)有k个星星,就是k级,问每级有多少个星星。
思路 只用看每个星星当前有多少个星星就可,因为他后面的纵坐标肯定大于等于它。
用一个level数组记录每个等级下有多少个星星,sum函数返回的是它之前有多少星星。

#include<iostream>
using namespace std;
const  int N=32010;
int w[N],tr[N],level[N]; int lowbit(int x)
{
   
    return x&-x;
}
void add(int a)
{
   
    for(int i=a;i<=N;i+=lowbit(i))
    tr[i]++;
}
int sum(int x)
{
   
    int res=0;
    for(int i=x;i;i-=lowbit(i))
    res+=tr[i];
    return res;
}
int main()
{
   
    int n;
    cin>>n;
    for(int i=0;i<n;i++)
    {
   
        int x,y;
        cin>>x>>y;
        x++;
        level[sum(x)]++;
        add(x);
    }
    for(int i=0;i<=n-1;i++)
    printf("%d\n",level[i]);
    return 0;
}