题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1556
思路:线段树成段更新的水题,几乎一次AC,不必多说,直接上代码
///2014.6.7
///hdu1556
//AC_Time : 1000MS
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
#define lson l , m , rt << 1
#define rson m + 1 , r , rt << 1 | 1
const int maxn = 110000;
int n;
int segT[maxn<<2];
int sum[maxn];
void build(){
memset(segT,0,sizeof(segT));
memset(sum,0,sizeof(sum));
}
void PushDown(int rt){
segT[rt<<1] += segT[rt] ;
segT[rt<<1|1] += segT[rt] ;
}
void update(int L,int R,int l,int r,int rt){
if( L<=l && r<=R ){
segT[rt] ++;
return ;
}
if( l==r ) return ;
int m = (l+r)>>1;
if( L<=m ) update(L,R,lson);
if( R>m ) update(L,R,rson);
}
void query(int l,int r,int rt){
if( l==r ){
sum[l] = segT[rt];
return;
}
PushDown(rt);
int m = (l+r)>>1;
query(lson);
query(rson);
}
int main(){
// freopen("in","r",stdin);
// freopen("out","w",stdout);
while( scanf("%d",&n) != EOF && n ){
build();
for(int i=0 ; i<n ; i++){
int a,b;
scanf("%d%d",&a,&b);
update(a,b,1,n,1);
}
query(1,n,1);
printf("%d",sum[1] );
for(int i=2 ; i<=n ;i++){
printf(" %d",sum[i] );
}
printf("\n");
}
return 0;
}