POJ 2352 Stars(树状数组)

  星星的级别就是横坐标小于它,纵坐标不大于它的点个数。因为输入是有序的,纵坐标没有起到

作用,所以只要注意x值就行了。 用树状数组来实现

/*Accepted    376K    110MS    C++    774B    2012-08-07 10:58:07*/

#include<stdio.h>

#include<string.h>

#include<stdlib.h>



const int MAXN = 1 << 15;

int T[MAXN], ans[MAXN];



int lowb(int t)

{

    return t & (-t);

}



void insert(int i)

{

    for( ; i < MAXN; T[i] ++, i += lowb(i));

}



int sum(int i)

{

    int cnt = 0;

    for( ; i > 0; cnt += T[i], i -= lowb(i));

    return cnt;

}



int main()

{

    int n, x, y, i;

    while(scanf("%d", &n) == 1)

    {

        memset(T, 0, sizeof T);

        memset(ans, 0, sizeof ans);

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

        {

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

            ++ x;

            ++ ans[sum(x)];

            insert(x);

        }

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

        {

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

        }

    }

    return 0;

}

 

 

你可能感兴趣的:(树状数组)