#include<Stdio.h>
#include<string.h>
int n;
int arr[100005];
int low(int x)
{
return (x)&(-x);
}
void update(int x,int y)
{
while(x>0)
{
arr[x]+=y;
x-=low(x);
}
return;
}
int getsum(int x)
{
int sum=0;
while(x<=n)
{
sum+=arr[x];
x+=low(x);
}
return sum;
}
int main()
{
int a,b,i,j;
while(scanf("%d",&n)&&n)
{
memset(arr,0,sizeof(arr));
j=n;
while(j--)
{
scanf("%d%d",&a,&b);
update(a-1,-1);
update(b,1);
}
for(i=1;i<=n;i++)
{
printf("%d",getsum(i));
if(i<n)
printf(" ");
}
printf("\n");
}
return 0;
}
这是一道中文题目,题目的意思大家自己能够看懂。主要的思想是线段树的成段更新