HDU 1541 Stars

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;

}

 

你可能感兴趣的:(tar)