Cod sursa(job #3144168)

Utilizator AnSeDraAndrei Sebastian Dragulescu AnSeDra Data 5 august 2023 16:35:21
Problema Schi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <fstream>

using namespace std;

const int Nmax = 30005;

ifstream fin("schi.in");
ofstream fout("schi.out");

int v[Nmax], sol[Nmax], aint[4 * Nmax];

void build(int nod, int st, int dr){
    if(st == dr){
        aint[nod] = 1;
        return;
    }

    int mid;
    mid = (st + dr) / 2;

    build(2 * nod, st, mid);
    build(2 * nod + 1, mid + 1, dr);

    aint[nod] = aint[2 * nod] + aint[2 * nod + 1];
}

void update(int nod, int st, int dr, int poz, int indice){
    if(st == dr){
        sol[st] = indice;
        aint[nod] = 0;
        return;
    }

    int mid;
    mid = (st + dr) / 2;

    if(poz <= aint[2 * nod]){
        update(2 * nod, st, mid, poz, indice);
    }
    else{
        update(2 * nod + 1, mid + 1, dr, poz - aint[2 * nod], indice);
    }

    aint[nod] = aint[2 * nod] + aint[2 * nod + 1];
}

int main(){
    int n;

    fin >> n;

    for(int i = 1; i <= n; i++){
        fin >> v[i];
    }

    build(1, 1, n);

    for(int i = n; i >= 1; i--){
        update(1, 1, n, v[i], i);
    }

    for(int i = 1; i <= n; i++){
        fout << sol[i] << '\n';
    }

    return 0;
}