给出几颗星星的坐标,求出每颗星星不超出他坐标范围的星星有几颗,不包括自己
由于题目给出的坐标是先x后y从小到大给出的序列,因此不用排序直接套模版树状数组~
用x依次来更新其他数据
#include <stdio.h>
#include <string.h>
#define N 16000
#define M 33000
int c[M],num[N];
int lowbit(int x)
{
return x&(-x);
}
void update(int x)
{
while(x<M)
{
c[x]++;
x+=lowbit(x);
}
}
int get(int x)
{
int sum=0;
while(x>0)
{
sum+=c[x];
x-=lowbit(x);
}
return sum;
}
int main()
{
int n,x,y;
while(scanf("%d",&n)!=EOF)
{
memset(c,0,sizeof(c));
memset(num,0,sizeof(num));
for(int i=0;i<n;i++)
{
scanf("%d%d",&x,&y);
x++;//x=0时候,update中会死循环
update(x);
num[get(x)-1]++;
}
for(int i=0;i<n;i++)
printf("%d\n",num[i]);
}
return 0;
}

浙公网安备 33010602011771号