Cod sursa(job #2833925)

Utilizator Titus_PirsanTitus-Teodor Pirsan Titus_Pirsan Data 15 ianuarie 2022 23:41:54
Problema Schi Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <fstream>

using namespace std;

const string filename = "aib";
ifstream fin(filename + ".in");
ofstream fout(filename + ".out");

const int max_size = 3e4 + 5;
const int tree_size = 1e5 + 5;
int tree[tree_size], ans[max_size], a[max_size];

void precalculate(int node, int l, int r) {
    if (l == r) {
        tree[node] = 1;
        return;
    }
    int mid = (l + r) / 2;
    precalculate(2 * node, l, mid);
    precalculate(2 * node + 1, mid + 1, r);
    tree[node] = tree[node * 2] + tree[2 * node + 1];
}

void update(int node, int l, int r, int val, int index) {
    if (l == r) {
        tree[node] = 0;
        ans[l] = index;
        return;
    }
    int mid = (l + r) / 2;
    if (val <= tree[node * 2]) {
        update(2 * node, l, mid, val, index);
    } else {
        update(2 * node + 1, mid + 1, r, val - tree[2 * node], index);
    }
    tree[node]--;
}

int main() {
    int n;
    fin >> n;

    for (int i = 1; i <= n; i++) {
        fin >> a[i];
    }
    precalculate(1, 1, n);
    for (int i = n; i >= 1; i--) {
        update(1, 1, n, a[i], i);
    }
    for (int i = 1; i <= n; i++) {
        fout << ans[i] << '\n';
    }
    return 0;
}