Pagini recente » Cod sursa (job #2688645) | Cod sursa (job #703218) | Cod sursa (job #488159) | Cod sursa (job #50403) | Cod sursa (job #47085)
Cod sursa(job #47085)
#include<stdio.h>
#define max 32*1024
long v[max];
long st[max];
long dr[max];
long valdr[max],next=1;
void adauga(long a,long b,long c)
{
if(a==1) {v[1] = a;return;}
if(v[b] == 0) {v[b] = a; return;}
if(valdr[b] >= c)
{
if(dr[b]==0) dr[b]=++next;
valdr[b]++;
adauga(a,dr[b],c);
return;
}
if(st[b]==0) st[b]=++next;
adauga(a,st[b],c-valdr[b]-1);
}
void drs(long a)
{
if(v[a]==0) return;
drs(dr[a]);
printf("%ld\n",v[a]);
drs(st[a]);
}
int main()
{
long i,n,x;
freopen("schi.in","r",stdin);
freopen("schi.out","w",stdout);
scanf("%ld",&n);
for(i=1;i<=n;i++)
{
scanf("%ld",&x);
adauga(i,1,x-1);
}
i++;
drs(1);
return 0;
}