Cod sursa(job #3360691)

Utilizator livliviLivia Magureanu livlivi Data 16 iulie 2026 00:06:49
Problema Schi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <iostream>
#include <fstream>
#include <vector>

#define lsb(x) (x & (-x))

using namespace std;

struct Fenwick {
    vector<int> aib;

    Fenwick(int n) {
        aib.resize(n + 1);
    }

    void update(int i, int val) {
        for (; i < aib.size(); i += lsb(i)) {
            aib[i] += val;
        }
    }

    int bin_search(int val) {
        int ans = 0;
        int sum = 0;
        for (int pas = (1 << 15); pas > 0; pas /= 2) {
            if (ans + pas >= aib.size()) { continue; }
            if (sum + aib[ans + pas] < val) {
                ans += pas;
                sum += aib[ans];
            }
        }
        return ans;
    }
};

int main() {
    ifstream cin("schi.in");
    ofstream cout("schi.out");

    int n; cin >> n;
    vector<int> v(n);
    for (auto& i : v) {
        cin >> i;
    }

    Fenwick ft(n);
    for (int i = 1; i <= n; i++) {
        ft.update(i, 1);
    }

    vector<int> ans(n);
    for (int i = n - 1; i >= 0; i--) {
        int real_place = ft.bin_search(v[i]);
        ans[real_place] = i + 1;
        ft.update(real_place + 1, -1);
    }

    for (auto& i : ans) {
        cout << i << "\n";
    }

    return 0;
}