Cod sursa(job #218523)
//schi cu aib
#include <cstdio>
#define MAXIMUS 30002
#define f(x)((x^(x-1))&x)
using namespace std;
int n,m,arb[MAXIMUS],sol[MAXIMUS],sir[MAXIMUS];
void update(int pozitie,int valoare)
{
while(pozitie<=n)
{
arb[pozitie]+=valoare;
pozitie+=f(pozitie);
}
}
int aduna(int pozitie)
{
int s=0;
while(pozitie>0)
{
s+=arb[pozitie];
pozitie-=f(pozitie);
}
return s;
}
int minim(int x)
{
int p,i;
for(p=1;p<n;p*=2);
for(i=n;p;p/=2)
if(i-p>=1)
if(x<=aduna(i-p))
i-=p;
return i;
}
void solve()
{
int zz;
for(int i=0;i<n;i++)
update(i+1,1);
for(int i=n;i;i--)
{
zz=minim(sir[i-1]);
sol[zz]=i;
update(zz,-1);
}
}
int main(){
freopen("schi.in","r",stdin);
freopen("schi.out","w",stdout);
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%d",&sir[i]);
solve();
for(int i=1;i<=n;i++)
printf("%d\n",sol[i]);
fclose(stdout);
return 0;
}