Cod sursa(job #2312817)

Utilizator cameliapatileaPatilea Catalina Camelia cameliapatilea Data 5 ianuarie 2019 15:58:11
Problema Schi Scor 70
Compilator c-64 Status done
Runda Arhiva de probleme Marime 1.39 kb
#include<stdio.h>
int v[30001], aux[60005], arbore[30005], n;
void construire_arbore(int st, int dr, int pozitie)
{

    if(st == dr)
        aux[pozitie] = 1;
    else {
        int mijloc = (st + dr) / 2;
        construire_arbore(st, mijloc, 2 * pozitie);
        construire_arbore(mijloc + 1, dr, 2 * pozitie + 1);
        aux[pozitie] = aux[pozitie * 2] + aux[pozitie * 2  + 1];
    }

}
void restabilire_arbore(int st, int dr, int pozitie, int pozitie_curenta, int nod)
{

    if(st == dr)
    {
         arbore[st] = pozitie_curenta;
        aux[pozitie] = 0;

    }
    else{
        int mijloc = (st + dr) / 2;
        if(nod <= aux[2 * pozitie])
            restabilire_arbore(st, mijloc, 2 * pozitie, pozitie_curenta, nod);
        else restabilire_arbore(mijloc + 1, dr, 2 * pozitie + 1,  pozitie_curenta, nod - aux[2 * pozitie]);
        aux[pozitie] = aux[pozitie * 2] + aux[pozitie  * 2 + 1];
    }
}
void citire()
{

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

    construire_arbore(1, n, 1);

}
void rezolvare()
{
 FILE *g = fopen("schi.out", "w+");

    for(int i = n ; i > 0; i--)
        restabilire_arbore(1, n ,1, i, v[i]);

    for(int i = 1; i <= n; i++)
        fprintf(g, "%d\n", arbore[i]);
}
int main()
{

    citire();
    rezolvare();
    return 0;
}