Cod sursa(job #3229191)

Utilizator Sebi_RipaSebastian Ripa Sebi_Ripa Data 14 mai 2024 12:09:02
Problema Schi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <fstream>

using namespace std;

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

int v[30005], st[120005], ans[30005];

void update(int l, int r, int node, int poz, int val) {
    if(l == r) {
        st[node] += val;
        return;
    }
    int mid = (l+r)/2;
    if(poz <= mid) update(l, mid, node*2, poz, val);
    else update(mid+1, r, node*2+1, poz, val);
    st[node] = st[node*2] + st[node*2+1];
}

int query(int l, int r, int node, int val) {
    if(l == r)
        return l;
    int mid = (l+r)/2, ans;
    if(st[2*node] >= val) ans = query(l, mid, node*2, val);
    else ans = query(mid+1, r, node*2+1, val - st[2*node]);
    return ans;
}

int main() {
    int n;
    cin >> n;
    for(int i = 1; i <= n; i++) {
        cin >> v[i];
        update(1, n, 1, i, 1);
    }
    for(int i = n; i >= 1; i--) {
        int poz = query(1, n, 1, v[i]);
        ans[poz] = i;
        update(1, n, 1, poz, -1);
    }
    for(int i = 1; i <= n; i++)
        cout << ans[i] << '\n';
}