poj 2352 Stars

 
  

大致题意:给定一组点,问二维空间中各个点的等级是多少,点的等级定义如下:其左下方点的个数

用的是树状数组,别人说是树状数组的入门题目,我看了好多遍都没能非常理解,最后基本上是把代码背下来了,

明天再贴上用线段树做的!

# 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;

}

你可能感兴趣的:(tar)