Cod sursa(job #212366)

Utilizator marinMari n marin Data 5 octombrie 2008 11:44:16
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <stdio.h>
#define DIM 30001


int C[DIM],L[DIM];
int V[DIM*3];

int n,i;

void cre(int st, int dr, int nod){
  int mij;
  if (st==dr) {
    V[nod] = 1;
  } else {
    mij = (st+dr)/2;
    cre(st, mij, 2*nod);
    cre(mij+1, dr, 2*nod+1);
    V[nod] = V[2*nod]+V[2*nod+1];
  }
}

void cautSiCorect(int st, int dr, int nod, int c, int poz){
  int mij;
  if (st==dr) {
    V[nod] = 0;
    L[st] = c;
  } else {
    mij = (st+dr)/2;
    if (V[2*nod]>=poz)
      cautSiCorect(st,mij,2*nod,c,poz);
    else
      cautSiCorect(mij+1,dr,2*nod+1,c,poz-V[2*nod]);
    V[nod] = V[2*nod]+V[2*nod+1];
  }
}


int main(){




  FILE *f = fopen("schi.in","r");
  fscanf(f,"%d",&n);
  for (i=1;i<=n;i++) {
    fscanf(f,"%d",&C[i]);
  }
  fclose(f);

  cre(1,n,1);

  for (i=n;i>=1;i--) {
    cautSiCorect(1,n,1,i,C[i]);
  }

  FILE *g = fopen("schi.out","w");
  for (i=1;i<=n;i++) {
    fprintf(g,"%d\n",L[i]);
  }
  fclose(g);

  return 0;
}