Pagini recente » Rezultatele filtrării | Cod sursa (job #2682260) | Cod sursa (job #1446756) | Rezultatele filtrării | Cod sursa (job #1425474)
#include<stdio.h>
int v[120001],ai[120001],p[120001];
int q(int nod,int st,int dr,int i)
{
--ai[nod];
if (st==dr)
return st;
int med=(st+dr)/2;
if (i>ai[2*nod])
return q(2*nod+1,med+1,dr,i-ai[2*nod]);
else
return q(2*nod,st,(st+dr)/2,i);
}
int main()
{
int n,i,x=2;
freopen("schi.in","r",stdin);
freopen("schi.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&v[i]);
for(;x<n;x=x*2);
for(i=x;i<x+n;i++)
ai[i]=1;
for(i=x-1;i;i--)
ai[i]=ai[2*i]+ai[2*i+1];
for(i=n;i>0;i--)
p[q(1,1,x,v[i])]=i;
for(i=1;i<=n;i++)
printf("%d\n",p[i]);
return 0;
}