Pagini recente » Cod sursa (job #2587330) | Cod sursa (job #432130) | Cod sursa (job #931148) | Cod sursa (job #308259) | Cod sursa (job #212230)
Cod sursa(job #212230)
#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=0;i<n;i++)
scanf("%d",&s[i]);
build(1,1,n);
for(int i=n-1;i>=0;i--)
{
poz=s[i];
val=i;
rebuild(1,1,n);
}
for(int i=1;i<=n;i++)
printf("%d\n",sol[i]+1);
fclose(stdout);
return 0;
}