Cod sursa(job #200569)
#include <cstdio>
#include <algorithm>
#define IN "schi.in"
#define OUT "schi.out"
#define left (nod << 1)
#define right ((nod << 1) | 1)
#define mij ( (u+p)>>1 )
#define FOR(i,a,b) for(int i=a;i<=b;++i)
#define N_MAX 1<<15
int sol[N_MAX],A[N_MAX << 1],v[N_MAX];
int N;
void scan()
{
freopen(IN, "r",stdin);
freopen(OUT, "w",stdout);
scanf("%d\n", &N);
FOR(i,1,N)
scanf("%d", &v[i]);
}
int update(int nod,int u,int p)
{
if(u>p)
return 0;
if(u==p)
A[nod] = 1;
else
A[nod] = update(left,u,mij) + update(right,mij+1,p);
return A[nod];
}
int query(int nod,int u,int p,int x)
{
--A[nod];
if(u == p)
return u;
if(A[left] >= x)
return query(left,u,mij,x);
else
return query(right,mij + 1,p,x - A[left]);
}
void solve()
{
update(1,1,N);
for(int i=N;i;i--)
sol[ query(1,1,N,v[i]) ] = i;
FOR(i,1,N)
printf("%d\n",sol[i]);
}
int main()
{
scan();
solve();
return 0;
}