Cod sursa(job #3357076)

Utilizator rapidu36Victor Manz rapidu36 Data 5 iunie 2026 18:41:48
Problema Schi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <fstream>
#include <iostream>
#include <vector>

using namespace std;

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

vector <int> aint;

int pow_2(int n) {
    int p = 1;
    while (p <= n) {
        p *= 2;
    }
    return p * 2;
}

int interogare_act(int p, int st, int dr, int poz) {
    if (st == dr) {
        aint[p] = 1;
        return st;
    }
    int m = (st + dr) / 2, fs = 2 * p, fd = 2 * p + 1;
    int poz_libere_st = m - st + 1 - aint[fs], rez;
    if (poz <= poz_libere_st) {
        rez = interogare_act(fs, st, m, poz);
    } else {
        rez = interogare_act(fd, m + 1, dr, poz - poz_libere_st);
    }
    aint[p] = aint[fs] + aint[fd];
    return rez;
}

int main() {
    int n;
    in >> n;
    vector <int> clasament_inter(n + 1);
    for (int i = 1; i <= n; i++) {
        in >> clasament_inter[i];
    }
    in.close();
    vector <int> clasament_final(n + 1);
    aint.resize(pow_2(n), 0);
    for (int i = n; i >= 1; i--) {
        int poz = interogare_act(1, 1, n, clasament_inter[i]);
        clasament_final[poz] = i;
    }
    for (auto c : vector(clasament_final.begin() + 1, clasament_final.end())) {
        out << c << "\n";
    }
    out.close();
    return 0;
}