Pagini recente » Istoria paginii runda/simulare_oji_cls12_nr5/clasament | Istoria paginii utilizator/catrinescualex | Cod sursa (job #2084080) | Cod sursa (job #151930) | Cod sursa (job #173732)
Cod sursa(job #173732)
#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\n",sol[i]);
return 0;
}