Pagini recente » Cod sursa (job #2809757) | Cod sursa (job #2084644) | Cod sursa (job #491535) | Profil Mihai Bugeac | Cod sursa (job #356010)
Cod sursa(job #356010)
#include <stdio.h>
#define N 1<<15
#define M 1<<16
short int n,v[N],arb[M],poz[N];
void read()
{
scanf("%hd",&n);
int i;
for (i=1; i<=n; i++)
scanf("%hd",&v[i]);
}
void cstr(int nod,int st,int dr)
{
arb[nod]=dr-st+1;
if (st==dr)
return;
int mij=(st+dr)/2;
cstr(2*nod,st,mij);
cstr(2*nod+1,mij+1,dr);
}
void update(int nod,int st,int dr,int pozitie,int loc)
{
arb[nod]--;
if (st==dr)
{
poz[st]=pozitie;
return;
}
int mij=(st+dr)/2;
if (arb[2*nod]>=loc)
update(2*nod,st,mij,pozitie,loc);
else
{
loc-=arb[2*nod];
update(2*nod+1,mij+1,dr,pozitie,loc);
}
}
int main()
{
freopen("schi.in","r",stdin);
freopen("schi.out","w",stdout);
read();
cstr(1,1,n);
int i;
for (i=n; i>=1; i--)
update(1,1,n,i,v[i]);
for (i=1; i<=n; i++)
printf("%hd\n",poz[i]);
return 0;
}