hdu 1556 Color the ball(可不用树状数组)

普通数组 312MS

 

#include <stdio.h>
#include <string.h>

#define MAXN 100010

int n,section[MAXN];

int main()
{
    int i,j,k;
    while(scanf("%d",&n),n)
    {
        memset(section,0,sizeof(section));
        for(k=0;k<n;k++)
        {
            scanf("%d %d",&i,&j);
            section[i]++;
            section[j+1]--;
        }
        int cnt=section[1];
        printf("%d",cnt);
        for(i=2;i<=n;i++)
        {
            cnt += section[i];
            printf(" %d",cnt);
        }
        printf("\n");
    }
    return 0;
}


//**************************************************************
树状数组 390MS

#include <stdio.h>
#include <string.h>

#define MAXN 100010

int n,c[MAXN];

inline int lowbit(int x)
{
    return x&(-x);
}
inline void update(int x,int delta)
{
    while(x<MAXN)
    {
        c[x]+=delta;
        x+=lowbit(x);
    }
}
inline int getSum(int x)
{
    int s=0;
    while(x>0)
    {
        s+=c[x];
        x-=lowbit(x);
    }
    return s;
}

int main()
{
    int i,j,k;
    while(scanf("%d",&n),n)
    {
        memset(c,0,sizeof(c));
        for(k=0;k<n;k++)
        {
            scanf("%d %d",&i,&j);
            update(i,1);
            update(j+1,-1);
        }
        printf("%d",getSum(1));
        for(i=2;i<=n;i++) printf(" %d",getSum(i));
        printf("\n");
    }
    return 0;
}

posted @ 2010-09-07 18:37  菜到不得鸟  阅读(446)  评论(1)    收藏  举报