题意 对一个初始均为0的序列,每次对一个区间里的数都加1,最后查询所有数得几
思路 对区间修改update[l,1],update[r+1,-1] 查询i位置:query(i)
#include <stdio.h>
#include <cstring>
using namespace std;
const int maxn = 100005;
int tree[maxn];
int n;
inline int lowbit(int x)
{
return x&(-x);
}
void update(int i,int x)
{
while(i<=n)
{
tree[i] += x;
i += lowbit(i);
}
}
int query(int i)
{
int ret = 0;
while(i > 0)
{
ret += tree[i];
i -= lowbit(i);
}
return ret;
}
int main()
{
int i,j;
while(scanf("%d",&n)==1 && n)
{
memset(tree,0,sizeof(tree));
for(i=0;i<n;i++)
{
int a,b;
scanf("%d%d",&a,&b);
update(a,1);
update(b+1,-1);
}
for(i=1;i<n;i++)
{
printf("%d ",query(i));
}
if(i==n)
printf("%d\n",query(i));
}
return 0;
}