Pagini recente » Cod sursa (job #569761) | Cod sursa (job #2317512) | Cod sursa (job #1530732) | Cod sursa (job #2584774) | Cod sursa (job #177139)
Cod sursa(job #177139)
#include<stdio.h>
#define nmax 30010
int v[3*nmax],val[nmax];
void build(int x, int y, int p)
{
if(x==y)
{
v[p]=1;
return;
}
int mij=(x+y)>>1;
build(x,mij,p<<1);
build(mij+1,y,(p<<1)+1);
v[p]=v[p<<1]+v[(p<<1)+1];
}
int query(int x, int y, int p, int a)
{
if(x==y)
{
v[p]=0;
return x;
}
int mij=(x+y)>>1,rez=0;
if(a<=v[p<<1]) rez=query(x,mij,p<<1,a);
else rez=query(mij+1,y,(p<<1)+1,a-v[p<<1]);
v[p]=v[p<<1]+v[(p<<1)+1];
return rez;
}
int main()
{
int n,i,sol[nmax];
freopen("schi.in","r",stdin);
freopen("schi.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&val[i]);
build(1,n,1);
for(i=n;i>=1;i--)
{
sol[query(1,n,1,val[i])]=i;
}
for(i=1;i<=n;i++)
printf("%d\n",sol[i]);
return 0;
}