题解 树状数组 POJ 2352

题意:见线段树 POJ 2352

代码:

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int MAX=200000;
int bit[MAX],a[MAX];
int i,n;
int sum(int i)
{
    int s=0;
    while(i>0)
    {
        s+=bit[i];
        i-=i&-i;
    }
    return s;
}
void add(int i,int x)
{
    while(i<=MAX)
    {
        bit[i]+=x;
        i+=i&-i;
    }
}
int main()
{
    int y,b[MAX];
    scanf("%d",&n);
    memset(bit,0,sizeof(bit));
    memset(b,0,sizeof(b));
    for(i=1;i<=n;i++)
    {
        scanf("%d%d",&a[i],&y);
    }
    for(i=1;i<=n;i++)
    {
        add(a[i]+1,1);
        b[sum(a[i]+1)-1]++;
    }
    for(i=0;i<n;i++)
        cout<<b[i]<<endl;
    return 0;
}
错误:TLE:未考虑坐标范围是大于等于0;

posted on 2014-07-28 12:53  一锅土豆  阅读(85)  评论(0编辑  收藏  举报