题目

天空中有一些星星,这些星星都在不同的位置,每个星星有个坐标。

如果一个星星的左下方(包含正左和正下)有 k 颗星星,就说这颗星星是 k 级的。

image-1668413844220

题解

#include<iostream>
using namespace std;
const int N=32010;
int n,level[N],tree[N];
int lowbit(int x){
    return x&(-x);
}
void add(int x){
    for(int i=x;i<N;i+=lowbit(i))
        tree[i]++;
    
}
int sum(int x){
    int ans=0;
    for(int i=x;i;i-=lowbit(i))ans+=tree[i];
    return ans;
}
int main(){
    cin>>n;
    for(int i=0;i<n;i++){
        int x,y;
        scanf("%d%d",&x,&y);
        x++;
        level[sum(x)]++;
        add(x);
    }
    for(int i=0;i<n;i++)cout<<level[i]<<endl;
    
    return 0;
}