Pagini recente » Cod sursa (job #508205) | Cod sursa (job #3147867) | Cod sursa (job #3269044) | Cod sursa (job #652594) | Cod sursa (job #89496)
Cod sursa(job #89496)
#include <stdio.h>
#define NMAX 40000
long int arb[NMAX*3];
long int n,i,j,k,a[NMAX],cls[NMAX];
void build(long int nod, long int st, long int dr)
{
if (st==dr) arb[nod]=1;
else
{
long int mid;
mid=(st+dr)/2;
build(nod*2,st,mid);
build(nod*2+1,mid+1,dr);
arb[nod]=dr-st+1;
}
}
int query(long int nod, long int st, long int dr, long int val)
{
if (st==dr) {arb[nod]--;return st;}
else
{
long int mid=(st+dr)/2;
arb[nod]--;
if (val<=arb[2*nod]) return query(nod*2,st,mid,val);
else return query(nod*2+1,mid+1,dr,val-arb[2*nod]);
}
}
int main()
{
freopen("schi.in","r",stdin);
freopen("schi.out","w",stdout);
scanf("%ld",&n);
for (i=1;i<=n;i++)
scanf("%ld",&a[i]);
build(1,1,n);
for (i=n;i;i--)
{
k=query(1,1,n,a[i]);
cls[k]=i;
}
for (i=1;i<=n;i++) printf("%ld\n",cls[i]);
return 0;
}