题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=1556
树状数组变形,区间更新。
另附代码:
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int tree[100100];
int maxn;
int updata(int i,int v)
{
while(i<=maxn)
{
tree[i]+=v;
i+=i&-i;
}
return 0;
}
int read(int i)
{
int sum=0;
while(i>0)
{
sum+=tree[i];
i-=i&-i;
}
return sum;
}
int main()
{
int i,a,b,temp;
while(cin>>maxn&&maxn)
{
temp=maxn;
memset(tree,0,sizeof(tree));
while(temp--)
{
scanf("%d%d",&a,&b);
updata(a,1);
updata(b+1,-1);
}
for(i=1;i<=maxn;i++)
{
printf("%d",read(i));
if(i!=maxn)
cout<<" ";
else
cout<<endl;
}
}
return 0;
}