标签:os io for 问题 amp size ios algorithm
题目大意:
排队有人插队,每一次都插到第 i 个人的后面。
最后输出顺序。
思路分析:
你会发现,如果反向处理的话,你就知道这个人是第几个了。
那么问题一下子就简化了。
就是在线段树上找第几个空位置就行了。
#include <cstdio> #include <iostream> #include <cstring> #include <algorithm> #include <vector> #define lson num<<1,s,mid #define rson num<<1|1,mid+1,e #define maxn 200005 using namespace std; struct foo { int pos,val; }Q[maxn]; int cnt[maxn<<2]; int v[maxn]; void update(int num,int s,int e,int k,int val){ if(s==e){ cnt[num]++; v[s]=val; return; } int mid=(s+e)>>1; int t=mid-s+1-cnt[num<<1]; if(t>k)update(lson,k,val); else update(rson,k-t,val); cnt[num]=cnt[num<<1]+cnt[num<<1|1]; } int main() { int n; while(scanf("%d",&n)!=EOF) { memset(cnt,0,sizeof cnt); for(int i=1;i<=n;i++){ scanf("%d%d",&Q[i].pos,&Q[i].val); } for(int i=n;i>=1;i--){ update(1,1,n,Q[i].pos,Q[i].val); } for(int i=1;i<=n;i++){ printf("%d%c",v[i],i==n?'\n':' '); } } return 0; }
POJ 2828 Buy Tickets (线段树),布布扣,bubuko.com
标签:os io for 问题 amp size ios algorithm
原文地址:http://blog.csdn.net/u010709592/article/details/38171551