大致题意:给定一组点,问二维空间中各个点的等级是多少,点的等级定义如下:其左下方点的个数
用的是树状数组,别人说是树状数组的入门题目,我看了好多遍都没能非常理解,最后基本上是把代码背下来了,
明天再贴上用线段树做的!
# include<stdio.h> # include<string.h> int level[15001]; int a[32010];/////记录星星 int Lowbit(int x) { return x&(-x); } void modify(int x) { for(int i=x;i<=32001;i+=Lowbit(i))/////注意:不能写成i<=32000,由于x++了,所以x最大变为32001了 a[i]++; } int get_sum(int x) { int sum=0; for(int i=x;i>0;i-=Lowbit(i)) sum+=a[i]; return sum; } int main() { int i,n,x,y; while(scanf("%d",&n)!=EOF) { memset(level,0,sizeof(level)); memset(a,0,sizeof(a)); for(i=1;i<=n;i++) { scanf("%d%d",&x,&y); x++; level[get_sum(x)]++; modify(x); } for(i=0;i<n;i++) printf("%d\n",level[i]); } return 0; }