poj 2828 Buy Tickets 线段树 单点更新
2014-04-05 18:37
429 查看
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int N =200005; int maxn[N<<2]; struct node{ int id; int val; }s ; int a ; void build(int l,int r,int rt){ if(l==r){ maxn[rt]=1; return; } int mid=(l+r)>>1; build(l,mid,rt<<1); build(mid+1,r,rt<<1|1); maxn[rt]=maxn[rt<<1]+maxn[rt<<1|1]; } int update(int l,int r,int pos,int rt){ if(l==r){ maxn[rt]--; return l; } int mid=(l+r)>>1; maxn[rt]--; if(maxn[rt<<1]>=pos) return update(l,mid,pos,rt<<1); else return update(mid+1,r,pos-maxn[rt<<1],rt<<1|1); } int main(){ int n; while(scanf("%d",&n)!=EOF){ build(0,n-1,1); for(int i=0;i<n;i++){ scanf("%d%d",&s[i].id,&s[i].val); } int pos; for(int i=n-1;i>=0;i--){ pos=update(0,n-1,s[i].id+1,1); //printf("pos=%d ",pos); a[pos]=s[i].val; } for(int i=0;i<n-1;i++){ printf("%d ",a[i]); } printf("%d\n",a[n-1]); } return 0; }线段树是很好写,就是自己没想到倒着更新。。。。
相关文章推荐
- POJ 2828 Buy Tickets(线段树-单点更新)
- POJ 2828 Buy Tickets (线段树 单点更新-查找第k大元素)
- POJ 2828 Buy Tickets(线段树--单点更新)
- 【poj】2828 Buy Tickets、2182 Lost Cow(线段树-单点更新)
- 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 [线段树-单点更新]【数据结构】【好题】
- 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 (线段树 单点更新 变形)