Cod sursa(job #49983)

Utilizator Spike7d5Spike7d5 Spike7d5 Data 6 aprilie 2007 18:13:27
Problema Schi Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#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, x, v;

freopen("schi.in", "r", stdin);
freopen("schi.out", "w", stdout);

scanf("%d", &n);
r=new(NOD);
r->val=1;
r->st=NULL;
r->dr=NULL;
scanf("%d", &r->fii);
r->fii--;

for (i=2;i<=n;i++) {
  scanf("%d", &x);
  x--; p=r; v=r->fii;

  while(1) {
    if (x<=v) {
      v-=p->fii;
      p->fii++;
      if (p->st!=NULL) {
	p=p->st;
	v+=p->fii; }
      else {
	x=0;
	break; } }
    else {
      v++;
      if (p->dr!=NULL)
	p=p->dr;
      else {
	x=1;
	break; } } }

  if (x==0) {
    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; }