标签:
线段树单点更新插入,从后往前,没难度
#include<iostream> #define maxn 200010 using namespace std; int ans[maxn]; struct node { int x,y; }; node people[maxn]; struct stu { int l,r,m; int v; }; stu mapp[maxn*4]; void build(int l,int r,int count) { mapp[count].l=l; mapp[count].r=r; mapp[count].m=(l+r)/2; mapp[count].v=r-l+1; if(l==r) return; build(l,mapp[count].m,count*2); build(mapp[count].m+1,r,count*2+1); } void updata(int num,int x,int count) { if(mapp[count].l==mapp[count].r) { ans[mapp[count].l]=x; mapp[count].v=0; return; } if(num<=mapp[count*2].v) updata(num,x,count*2); else updata(num-mapp[count*2].v,x,count*2+1); mapp[count].v=mapp[count*2].v+mapp[count*2+1].v; } int main() { cin.sync_with_stdio(false); int n; while(cin>>n) { for(int i=n-1;i>=0;i--) { cin>>people[i].x>>people[i].y; people[i].x++; } build(1,n,1); for(int i=0;i<n;i++) { updata(people[i].x,people[i].y,1); } cout<<ans[1]; for(int i=2;i<=n;i++) { cout<<" "<<ans[i]; } cout<<endl; } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/zafkiel_nightmare/article/details/47681993