http://acm.hdu.edu.cn/showproblem.php?pid=1541

画星星,注意要把所有点向右平移一位,否则update会死循环(在(0,0))

ps:数组一定要开够啊啊啊

View Code
#include <stdio.h>
#include <string.h>
const int maxn1=15001;
const int maxn2=32001;
int n;
int tree[maxn2],ans[maxn1];
int lowbit(int i){
    return i&(-i);
}
void update(int i,int val)
{
    while(i<=maxn2)
    {
        tree[i]+=val;
        i+=lowbit(i);
    }
}
int Sum(int i)
{
    int sum=0;
    while(i>0)
    {
        sum+=tree[i];
        i-=lowbit(i);
    }
    return sum;
}
int main()
{
    int x,y,i;
    while(~scanf("%d",&n))
    {
        memset(tree,0,sizeof(tree));
        memset(ans,0,sizeof(ans));
        for(i=0;i<n;i++)
        {
            scanf("%d%d",&x,&y);
            ans[Sum(++x)]++;
            update(x,1);
        }
        for(i=0;i<n;i++)
            printf("%d\n",ans[i]);
    }
    return 0;
}