Cod sursa(job #2783364)

Utilizator teochess2017Togan Teodor-Bogdan teochess2017 Data 14 octombrie 2021 12:26:01
Problema Schi Scor 100
Compilator c-64 Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <stdio.h>
#include <stdlib.h>

#define MAXN 32768

int v[MAXN], arb[2 * MAXN], out[MAXN];

void find(int i, int n, int poz, int ind){
  if(i <= (n - 1)){
    if(poz <= arb[i * 2]){
      find(i * 2, n, poz, ind);
    }else{
      find(i * 2 + 1, n, poz - arb[i * 2], ind);
    }
    arb[i]--;
  }else{
    out[i - (n - 1) - 1] = ind;
    arb[i] = 0;
  }
}

int main()
{
    FILE *fin, *fout;
    int n, i, p;
    fin = fopen("schi.in", "r");
    fscanf(fin, "%d", &n);
    for(i = 0; i < n; i++){
      fscanf(fin, "%d", &v[i]);
    }
    fclose(fin);
    p = 1;
    while(p < n){
      p *= 2;
    }
    for(i = 0; i < p; i++){
      arb[i + (p - 1)] = 1;
    }
    for(i = p - 1; 1 <= i; i--){
      arb[i] = arb[i * 2] * 2;
    }
    for(i = n - 1; 0 <= i; i--){
      find(1, p, v[i], i + 1);
    }
    fout = fopen("schi.out", "w");
    for(i = 0; i < n; i++){
      fprintf(fout, "%d\n", out[i]);
    }
    fclose(fout);
    return 0;
}