#include<iostream>
#include<cstring>
#include<cstdio>
#define Max 100005
#define mid (l+r)>>1
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
using namespace std;
int N;
struct tree{
int l,r,s;
};
tree tr[Max<<2];
void bulid(int l,int r,int rt){
tr[rt].l=l;
tr[rt].r=r;
tr[rt].s=0;
if(l==r) return ;
int m=mid;
bulid(lson);
bulid(rson);
}
void add(int l,int r,int rt){
if(tr[rt].l ==l && tr[rt].r == r)
{
tr[rt].s++;
return ;
}
int m=(tr[rt].l+tr[rt].r)>>1;
if(l>=m+1)
add(l,r,rt<<1|1);
else if(r<=m)
add(l,r,rt<<1);
else{
add(lson);
add(rson);
}
}
void output(int rt,int t){
if(tr[rt].l == tr[rt].r){
printf("%d",tr[rt].s+t);
if(tr[rt].l == N)
printf("\n");
else printf(" ");
return ;
}
output(rt<<1,t+tr[rt].s);
output(rt<<1|1,t+tr[rt].s);
}
int main(){
int i,l,r;
while(scanf("%d",&N) && N){
bulid(1,N,1);
for(i=1;i<=N;i++){
scanf("%d %d",&l,&r);
add(l,r,1);
}
output(1,0);
}
return 0;
}
hdu 1556 初级线段树
最新推荐文章于 2019-04-06 19:49:53 发布