Pagini recente » Cod sursa (job #717032) | Cod sursa (job #444759) | Cod sursa (job #2903918) | Cod sursa (job #854752) | Cod sursa (job #211571)
Cod sursa(job #211571)
#include<cstdio>
using namespace std;
int poz,val,i,n;
int sol[30002],arb[100000],a[30002];
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()
{
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\n",sol[i]);
return 0;
}