Cod sursa(job #2753195)

Utilizator lucamLuca Mazilescu lucam Data 21 mai 2021 15:01:47
Problema Schi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <fstream>

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

const int N = 3e4 + 1;
const int L = 15;
int aib[N], n, res[N], v[N];

void update(int p, int x) {
    while (p <= n) {
        aib[p] += x;
        p += p & (-p);
    }
}

int search(int x) {
    int r = 0, step = 1 << L;
    while (step) {
        if (r + step <= n && aib[r + step] < x) {
            r += step;
            x -= aib[r];
        }
        step >>= 1;
    }
    return r + 1;
}

int main() {
    in >> n;
    for (int i = 1; i <= n; ++i) {
        in >> v[i];
        update(i, 1);
    }
    for (int i = n; i >= 1; --i) {
        int x = v[i];
        int pos = search(x);
        update(pos, -1);
        res[pos] = i;
    }
    for (int i = 1; i <= n; ++i) {
        out << res[i] << '\n';
    }
}