Pagini recente » Cod sursa (job #1272142) | Cod sursa (job #2776927) | Cod sursa (job #1704587) | Cod sursa (job #537971) | Cod sursa (job #212232)
Cod sursa(job #212232)
#include <cstdio>
int arb[100002],n,s[30002],poz,val,sol[30002];
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;
}