#include <stdio.h> const int maxn=100007; int add[maxn<<2]; int ql,qr; int shu[maxn]; void update(int o,int l,int r){ if(ql<=l&&r<=qr) add[o]+=1; else{ int m=l+(r-l)/2; int lc=o*2,rc=o*2+1; if(ql<=m) update(lc,l,m); if(qr>m) update(rc,m+1,r); } } void query(int o,int l,int r,int add1){ if(l==r){ shu[l]=add1+add[o]; } else{ int m=l+(r-l)/2; int lc=o*2,rc=o*2+1; query(lc,l,m,add1+add[o]); query(rc,m+1,r,add1+add[o]); } } int main(){ int n; while(scanf("%d",&n)==1&&n) { for(int i=1;i<=4*n;i++) add[i]=0; for(int i=1;i<=n;i++) { scanf("%d%d",&ql,&qr); update(1,1,n); } query(1,1,n,0); for(int i=1;i<=n;i++) if(i!=n) printf("%d ",shu[i]); else printf("%d",shu[i]); printf("\n"); } return 0; }
hdu1556
最新推荐文章于 2020-02-28 14:28:14 发布