
#include <bits/stdc++.h>
using namespace std;
#define N 100009
int c[N],n;
int lowbit(int i){
return (i&(-i));
}
void add(int i,int data){
while(i<=n){
c[i]+=data;
i+=lowbit(i);
}
}
int getSum(int i){
int sum=0;
while(i>0){
sum+=c[i];
i-=lowbit(i);
}
return sum;
}
int main(){
int i,a,b;
while(scanf("%d",&n)){
if(n==0)
break;
memset(c,0,sizeof(c));
for(i=1;i<=n;i++){
scanf("%d %d",&a,&b);
add(a,1);
add(b+1,-1);
}
for(i=1;i<n;i++){
printf("%d ",getSum(i));
}
printf("%d\n",getSum(i));
}
return 0;
}

本文深入探讨了区间树状数组算法的实现细节,通过具体的代码示例,讲解了如何利用树状数组进行区间更新和查询操作。文章首先定义了树状数组的基本结构和操作,包括lowbit、add和getSum函数,随后展示了如何使用这些函数解决区间更新和查询问题。

被折叠的 条评论
为什么被折叠?



