Pagini recente » Cod sursa (job #1254900) | Cod sursa (job #1489260) | Cod sursa (job #1627079) | Cod sursa (job #796750) | Cod sursa (job #1390487)
#include<stdio.h>
#include<iostream>
int a[30001],res[30001],b[100001],n,pos;
void build(int nod,int val)
{
b[nod]=val;
if(val==1)
{
return;
}
build(2*nod+1,val/2);
if(val%2==1)
{
build(2*nod,val/2+1);
}
else
{
build(2*nod,val/2);
}
}
void solve(int nod,int s,int d,int val)
{
b[nod]--;
if(s==d)
{
pos=s;
return;
}
int mij=(s+d)/2;
if(b[nod*2]>=val)
{
solve(nod*2,s,mij,val);
}
else
{
val-=b[nod*2];
solve(nod*2+1,mij+1,d,val);
}
}
int main()
{
FILE *fin,*fout;
fin=fopen("schi.in","r");
fout=fopen("schi.out","w");
fscanf(fin,"%d",&n);
for(int i=1;i<=n;i++)
{
fscanf(fin,"%d",&a[i]);
}
build(1,n);
for(int i=n;i>=1;i--)
{
pos=-1;
solve(1,1,n,a[i]);
res[pos]=i;
}
for(int i=1;i<=n;i++)
{
fprintf(fout,"%d\n",res[i]);
}
}