给出几颗星星的坐标,求出每颗星星不超出他坐标范围的星星有几颗,不包括自己
由于题目给出的坐标是先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; }