【树状数组】 poj2352 Stars

来源:互联网 发布:淘宝客 api sdk 编辑:程序博客网 时间:2024/05/16 15:40

Stars

题目:http://poj.org/problem?id=2352

题意:在一个二维数组中统计某个等级星星的个数,星星的等级为不比此星星高且不在它右边范围内的星星个数。

题解:因为输入的数据已经排序,只要一边接收输入一边计算等级即可。

代码:

#include<cstdio>#include<cstring>using namespace std;int a[15005],c[32010];#define lowbit(x) ((x)&(-(x)))void update(int pos,int value) //更新pos的值{    int x=pos;    for(;x<=32005;x+=lowbit(x))        c[x]+=value;}int getsum(int pos)//求1到pos位置的和{    int x=pos,sum=0;    for(;x>0;x-=lowbit(x))        sum+=c[x];    return sum;}int main(){    int x,y,n;    for(;~scanf("%d",&n);)    {        memset(c,0,sizeof(c));        memset(a,0,sizeof(a));        for(int i=0;i<n;++i)        {            scanf("%d%d",&x,&y);            a[getsum(x+1)]++;            update(x+1,1);        }        for(int i=0;i<n;++i)            printf("%d\n",a[i]);    }    return 0;}
来源:http://blog.csdn.net/ACM_Ted