Cod sursa(job #3367995)

Utilizator rapidu36Victor Manz rapidu36 Data 12 octombrie 2026 17:15:49
Problema Schi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <fstream>
#include <vector>

using namespace std;

void actualizare(vector <int> &aib, int poz, int val) {
    int n = (int)aib.size() - 1;
    while (poz <= n) {
        aib[poz] += val;
        int p2  = (poz & (-poz));
        poz += p2;
    }
}

int interogare_poz_min(vector <int> &aib, int val) {
    int p2 = 1, n = (int)aib.size() - 1;
    while (p2 <= n / 2) {
        p2 *= 2;
    }
    int poz = 0;
    while (p2 != 0) {
        if (poz + p2 <= n && aib[poz+p2] < val) {
            poz += p2;
            val -= aib[poz];
        }
        p2 /= 2;
    }
    return poz + 1;
}

int main() {
    ifstream fin("schi.in");
    ofstream fout("schi.out");
    int n;
    fin >> n;
    vector <int> clasament_ini(n + 1), aib(n + 1, 0);
    for (int i = 1; i <= n; i++) {
        fin >> clasament_ini[i];
    }
    fin.close();
    for (int i = 1; i <= n; i++) {
        actualizare(aib, i, 1);
    }
    vector <int> clasament_final(n + 1);
    for (int i = n; i >= 1; i--) {
        int poz_fin = interogare_poz_min(aib, clasament_ini[i]);
        actualizare(aib, poz_fin, -1);
        clasament_final[poz_fin] = i;
    }
    for (int i = 1; i <= n; i++) {
        fout << clasament_final[i] << "\n";
    }
    fout.close();
    return 0;
}