IT民工
加油!

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

作用,所以只要注意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;
}

 

 

posted on 2012-08-07 12:00  找回失去的  阅读(198)  评论(0编辑  收藏  举报