标签:
#include<stdio.h> int n,m; int sum[100007]; struct Tree { int L; int R; int val; }node[1000000]; void buildTree(int l,int r,int index) { node[index].L=l; node[index].R=r; node[index].val=0; if(l==r) return ; int mid=(l+r)/2; buildTree(l,mid,index<<1); buildTree(mid+1,r,index<<1|1); } void update(int l,int r,int index) { if(node[index].L>=l&&node[index].R<=r) { node[index].val+=1; return ; } int mid=(node[index].L+node[index].R)/2; if(mid>=r) update(l,r,index<<1); else if(mid<l) update(l,r,index<<1|1); else { update(l,mid,index<<1); update(mid+1,r,index<<1|1); } } void count(int index) { if(node[index].L==node[index].R) { sum[m]=node[index].val; m+=1; return ; } node[index<<1].val+=node[index].val; node[index<<1|1].val+=node[index].val; count(index<<1); count(index<<1|1); } int main() { while(scanf("%d",&n)!=EOF&&n) { buildTree(1,n,1); for(int i=0;i<n;i++) { int a,b; scanf("%d%d",&a,&b); update(a,b,1); } m=0; count(1); for(int i=0;i<m;i++) { if(i!=0) printf(" "); printf("%d",sum[i]); } printf("\n"); } return 0; }
标签:
原文地址:http://www.cnblogs.com/burning-flame/p/4983733.html