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;
}
浙公网安备 33010602011771号