Pagini recente » Cod sursa (job #1129566) | Cod sursa (job #1571484) | Cod sursa (job #1799552) | Arhiva de probleme | Cod sursa (job #173730)
Cod sursa(job #173730)
#include<stdio.h>
#define MAXN 30001
#define MAXM 100001
int poz,val,i,n;
int sol[MAXN],arb[MAXM],a[MAXN];
void build(int n,int li,int ls)
{
int m=(li+ls)/2,st=2*n,dr=2*n+1;
if(li==ls)
arb[n]=1;
else
{
build(st,li,m);
build(dr,m+1,ls);
arb[n]=arb[st]+arb[dr];
}
}
void query(int n,int li,int ls)
{
int m=(li+ls)/2,st=2*n,dr=2*n+1;
if(li==ls)
{
arb[n]=0;
sol[li]=val;
}
else
{
if(poz<=arb[st])
query(st,li,m);
else
{
poz=poz-arb[st];
query(dr,m+1,ls);
}
arb[n]=arb[st]+arb[dr];
}
}
int main(void)
{
freopen("schi.in","r",stdin);
freopen("schi.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
build(1,1,n);
n=n;
for(i=n;i>=1;i--)
{
val=i;
poz=a[i];
query(1,1,n);
}
for(i=1;i<=n;i++)
printf("%d ",sol[i]);
return 0;
}