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