Pagini recente » Monitorul de evaluare | Monitorul de evaluare | Cod sursa (job #3138862) | Cod sursa (job #3278822) | Cod sursa (job #50010)
Cod sursa(job #50010)
#include <stdio.h>
struct NOD { NOD *st, *dr; int val, fii; };
void afiseaza (NOD *nod) {
if (nod==NULL) return;
afiseaza(nod->st);
printf("%d\n", nod->val);
afiseaza(nod->dr); }
int main() {
NOD *r, *p;
int n, i, a, b;
freopen("schi.in", "r", stdin);
freopen("schi.out", "w", stdout);
scanf("%d%d", &n, &a);
r=new(NOD);
r->val=1;
r->st=NULL;
r->dr=NULL;
r->fii=0;
for (i=2;i<=n;i++) {
scanf("%d", &a);
a--; b=0; p=r;
while(a>=0) {
if (a<=b+p->fii) {
p->fii++;
if (p->st!=NULL)
p=p->st;
else
a=-1; }
else {
b+=p->fii+1;
if (p->dr!=NULL)
p=p->dr;
else
a=-2; } }
if (a==-1) {
p->st=new(NOD);
p=p->st; }
else {
p->dr=new(NOD);
p=p->dr; }
p->val=i;
p->fii=0;
p->st=NULL;
p->dr=NULL; }
afiseaza(r);
return 0; }