poj_2828线段树,逆序插入
2018-04-14 12:41
357 查看
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 const int maxn = 200020; using namespace std; int p[200020],v[200020]; int sum[maxn<<2]; int ans[maxn]; void build(int l,int r,int rt) { sum[rt]=r-l+1; int m=(r+l)/2; if(l==r) return; build(lson); build(rson); } void update(int v,int p,int l,int r,int rt) { sum[rt]--; int m=(r+l)/2; if(l==r) { ans[l]=v; return ; } if(sum[rt<<1]>=p) { update(v,p,lson); } else { p-=sum[rt<<1]; update(v,p,rson); } } int main() { int n; while(cin>>n) { for(int i=0; i<n; i++) scanf("%d%d",&p[i],&v[i]); build(1,n,1); for(int i=n-1; i>=0; i--) update(v[i],p[i]+1,1,n,1); cout<<ans[1]; for(int i=2; i<=n; i++) cout<<" "<<ans[i]; cout<<endl; } return 0; }
相关文章推荐
- poj 2828 Buy Tickets(线段树,逆序插入)
- poj 2828 线段树(单点更新,逆序插入)
- POJ 2828 线段树 逆序插入
- POJ 2828 逆序插入加线段树
- POJ 2828 线段树 逆序插入
- poj2828 经典线段树应用 逆序插入
- poj_2828线段树,逆序插入
- poj_2828线段树,逆序插入
- poj 2828 Buy Tickets 【线段树】【逆序插入 + 单点更新 + 区间求和】
- POJ 2828 Buy Tickets (线段树,逆序遍历)
- POJ 2828 Buy Tickets【线段树单点更新+逆序遍历】【经典题】【模板题】
- POJ 2828 线段树单点插入
- poj 2828 buy Tickets 用线段树模拟带插入的队列
- poj 2828 Buy Tickets【线段树单点更新】【逆序输入】
- poj 2828 Buy Tickets (线段树(排队插入后输出序列))
- poj 2828 buy Tickets 用线段树模拟带插入的队列 单点更新
- (中等) POJ 2828 Buy Tickets , 逆序+线段树。
- POJ 2828——Buy Tickets(树状数组,线段树——逆序遍历)
- POJ 2828 Buy Tickets (想法题&后序插入&线段树下的二分查找)
- POJ 2828 Buy Tickets(多校连萌,线段树模拟插入)