天天看点

poj_2352 Stars (树状数组)

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

题意:

给你一些星星的坐标,按Y优先X次优先的顺序给的,定义每个星星(Xi,Yi)的级别为<xi&&<yi的星星个数。求每个级别有多少星星

思路:

因为坐标是按y顺序给出的,所以一层层的按顺序加到树状数组中,每加一次求一次Sum,即为该点的级别值。 

我的代码:

#include<stdio.h>
#define lowbit(i) (i)&(-i)
int c[32005],i,x,y,n,ans[15005];
void Add(int i,int val,int n)
{
    for(;i<=n;i+=lowbit(i)) c[i]+=val;
}
int Sum(int i)
{
    int ret=0;
    for(;i>0;i-=lowbit(i)) ret+=c[i];
    return ret; 
}
int main()
{
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        scanf("%d%d",&x,&y);
        ans[Sum(x+1)]++;
        Add(x+1,1,32001);//要更新到32001,因为X+1了 
    }
    for(i=0;i<n;i++)
        printf("%d\n",ans[i]);
    return 0;
}
/*第一次写数状数组啊,开始更新那里错了,WA^n。。。 */ 
           
上一篇: Soundex pku 2608
下一篇: PKU ACM 1163