poj 2352 树状数组

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

#include <stdio.h>

#define Max 17000
#define Maxn 320005
#define Lowbit(x) x&(-x)
#define Rep(i,n) for(i = 0;i <  n;i ++)
int c[Maxn],r[Max];

void update(int n)
{
    while(n < 320005)
    {
        c[n] ++;
        n += Lowbit(n);
    }
}

int getSum(int n)
{
    int sum = 0;
    while(n > 0)
    {
        sum += c[n];
        n -= Lowbit(n);
    }
    return sum;
}

int main()
{
    int n,i,x,y;
    scanf("%d",&n);
    Rep(i,n)
    {
        scanf("%d %d",&x,&y);
        r[getSum(x+1)]++;
        update(x+1);
    }
    Rep(i,n)
    printf("%d\n",r[i]);
    return 0;
}
原文地址:https://www.cnblogs.com/zhangteng512/p/2104861.html