Pagini recente » Cod sursa (job #465413) | Cod sursa (job #819323) | Cod sursa (job #1015341) | Cod sursa (job #2205565) | Cod sursa (job #212231)
Cod sursa(job #212231)
#include <cstdio>
int arb[30001],n,s[30001],poz,val,sol[30001];
void build(int nod, int st, int dr)
{
if(st>dr)
return;
if(st==dr)
{
arb[nod]=1;
return;
}
build(nod<<1,st,(st+dr)/2);
build((nod<<1)+1,(st+dr)/2+1,dr);
arb[nod]=arb[nod<<1]+arb[(nod<<1)+1];
}
void rebuild(int nod, int st, int dr)
{
if(st>dr)
return;
if(st==dr)
{
arb[nod]=0;
sol[st]=val;
return;
}
if(poz<=arb[nod<<1])
rebuild(nod<<1,st,(st+dr)/2);
else
{
poz-=arb[nod<<1];
rebuild((nod<<1)+1,(st+dr)/2+1,dr);
}
arb[nod]=arb[nod<<1]+arb[(nod<<1)+1];
}
int main()
{
freopen("schi.in","r",stdin);
freopen("schi.out","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&s[i]);
build(1,1,n);
for(int i=n;i>=1;i--)
{
poz=s[i];
val=i;
rebuild(1,1,n);
}
for(int i=1;i<=n;i++)
printf("%d\n",sol[i]);
fclose(stdout);
return 0;
}