您的位置:首页 > 其它

Stars(树状数组)

2014-01-16 17:40 155 查看
http://poj.org/problem?id=2352

题意:给出每个星星在平面内的坐标(x,y)(y递增,y相同时,x递增)。每颗星星的级别定义为,横纵坐标均不超过自己的星星个数(不包括自己),求级别为0~N-1的星星分别有多少个。

#include <stdio.h>
const int N=32001;
int n,c
,level
;
int lowbit(int x)
{
return x&(-x);
}
int sum(int x)//求和
{
int s = 0;
while(x>0)
{
s += c[x];
x -= lowbit(x);
}
return s;
}
void update(int pos)//更新
{
while(pos <= N)
{
c[pos]++;
pos += lowbit(pos);
}
}
int main()
{
int x,y;
scanf("%d",&n);
for (int i = 1; i <= n; i++)
{
scanf("%d %d",&x,&y);
level[sum(x+1)]++;//树状数组的下标从一开始,故所有横坐标右移一位,相对位置不变
update(x+1);
}
for (int i = 0; i < n; i++)
printf("%d\n",level[i]);
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: