POJ 2352 Stars

转载请注明出处:http://blog.csdn.net/a1dark

分析:本是一道线段树的题、现在学了树状数组、那就用树状数组来做、感觉优化了很多、初学树状数组、感觉很神奇、 特别是lowbit函数、orz之。。。

 

#include<stdio.h>

#include<string.h>

int sum[32005];

int level[15005];

int n;

int lowbit(int x)

{

    return x&(-x);

}

int Getsum(int x){

    int s=0;

    while(x>0){

        s+=sum[x];

        x-=lowbit(x);

    }

    return s;

}

int add(int x,int num)

{

    while(x<=32003)

    {

        sum[x]+=num;

        x+=lowbit(x);

    }

}

int main()

{

    int i,x,y;

    memset(level,0,sizeof(level));

    memset(sum,0,sizeof(sum));

    scanf("%d",&n);

    for(i=0;i<n;i++)

    {

        scanf("%d%d",&x,&y);

        level[Getsum(x+1)]++;

        add(x+1,1);

    }

    for(i=0;i<n;i++){

        printf("%d\n",level[i]);

    }

    return 0;

}


 


 

你可能感兴趣的:(tar)