#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int n;
int tree[100005];
int lowbit(int i)
{
return i&(-i);
}
void update(int i,int x)
{
while(i<=n)
{
tree[i]+=x;
i+=lowbit(i);
}
}
int query(int i)
{
int sum=0;
while(i>0)
{
sum+=tree[i];
i-=lowbit(i);
}
return sum;
}
int main()
{
int l,r;
int i;
while(scanf("%d",&n)!=-1&&n)
{
memset(tree,0,sizeof(tree));
int t=n;
while(t--)
{
scanf("%d%d",&l,&r);
update(l,1);//区间求和时 相当于都加了1
update(r+1,-1);
}
for(i=1;i<=n-1;i++)
printf("%d ",query(i));
printf("%d\n",query(n));
}
return 0;
}
树状数组(区间更新)HDU1556
最新推荐文章于 2020-03-23 11:33:01 发布