思路:
刚看树状数组,以为这题需要二维维护,当看到评论区大佬提醒y坐标可以不要的!
就明白啦~
代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int Max_n=1e5+10;
int n;
int c[Max_n],k[Max_n];
int lowbit(int k){
return k&-k;
}
void update(int k,int val){
while(k<Max_n){
c[k]+=1;
k+=lowbit(k);
}
}
int query(int k){
int ans=0;
while(k>0){
ans+=c[k];
k-=lowbit(k);
}
return ans;
}
int main()
{
scanf("%d",&n);
int x,y;
memset(c,0,sizeof(c));
memset(k,0,sizeof(k));
for(int i=1;i<=n;i++){
scanf("%d%d",&x,&y);
x++; //x=0时 update操作会死循环
k[query(x)]++;
update(x,1);
}
for(int i=0;i<n;i++)
printf("%d\n",k[i]);
return 0;
}