题意:
对于一个星星他有阶数,阶数的大小是按照他左下角有多少颗星星所决定的,现在问你从0~n-1阶的星星各有多少颗
思路:
有一个细节问题,就是当x不相同的时候,y以升序输入,当y相同时,我们以x的升序输入,也就是说,当我们输入到当前数的时候,他的左下角的大小其实已经知道了就是以他的0~x区间的数值。
#include<stdio.h>
#include<string.h>
int c[150010];
int ans[150010],n;
int lowbit(int x)
{
return x&-x;
}
void update(int num,int v)
{
while(num<=32001)
{
c[num]+=v;
num+=lowbit(num);
}
}
int getsum(int num)
{
int sum=0;
while(num)
{
sum+=c[num];
num-=lowbit(num);
}
return sum;
}
int main()
{
while(scanf("%d",&n)!=EOF)
{
int x,y;
memset(ans,0,sizeof(ans));
memset(c,0,sizeof(c));
for(int i=0;i<n;i++)
{
scanf("%d %d",&x,&y);
ans[getsum(x+1)]++;
update(x+1,1);
}
for(int i=0;i<n;i++)
{
printf("%d\n",ans[i]);
}
}
}