poj 2352 Stars

#include <iostream>            //树状数组
using namespace std;
int tree[32010],level[15010];
int lowbit(int x)
{
return x&(-x);
}
void modify(int x)
{
while(x<32010)
{
tree[x]
++;
x
+=lowbit(x);
}
}
int sum(int x)
{
int s=0;
while(x>0)
{
s
+=tree[x];
x
-=lowbit(x);
}
return s;
}
int main()
{
int n,i,x,y;
cin
>>n;
for(i=0;i<n;++i)
{
scanf(
"%d%d",&x,&y);
level[sum(x
+1)]++;
modify(x
+1); //modify(0)是个死循环,所以一律x+1
}
for(i=0;i<n;++i)
printf(
"%d\n",level[i]);
return 0;
}
//因为每当加上一个点后,modify()会把这一点的tree[]++,而求sum()时是不应该把自己纳入范围内的,所以先求sum,再modify

  

posted on 2011-07-20 22:50  sysu_mjc  阅读(116)  评论(0编辑  收藏  举报

导航