POJ2182-Lost Cows
http://poj.org/problem?id=2182
#include<stdio.h> #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 #define maxn 8080 int tree[maxn<<2],d1[maxn],ans[maxn]; void build(int l,int r,int rt) { tree[rt]=r-l+1; if(l==r) return; int m=(l+r)>>1; build(lson); build(rson); } int query(int l,int r,int rt,int p) { tree[rt]--; if(l==r) return l; int w=rt<<1; int m=l+r>>1; if(tree[w]>=p) return query(lson,p); else return query(rson,p-tree[w]); } int main(void) { int n,i; while(scanf("%d",&n)!=EOF) { build(1,n,1); for(i=1;i<n;i++) { scanf("%d",d1+i); d1[i]++; } d1[0]=1; for(i=n-1;i>=0;i--) ans[i]=query(1,n,1,d1[i]); for(i=0;i<n;i++) printf("%d\n",ans[i]); } return 0; }