Cod sursa(job #569296)

Utilizator dushmiMihai-Alexandru Dusmanu dushmi Data 1 aprilie 2011 12:26:59
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <cstdio>

const int N = 30005;

int n, a[N], ai[4 * N], rez[N];

void read() {
    freopen("schi.in", "r", stdin);
    freopen("schi.out", "w", stdout);
    scanf("%d", &n);
    for (int i = 1; i <= n; ++ i)
        scanf("%d", &a[i]);
}

void init(int nod, int p, int u) {
    if (p == u) {
        ai[nod] = 1;
        return;
    }
    int m = (p + u) / 2;
    init(2 * nod, p, m);
    init(2 * nod + 1, m + 1, u);
    ai[nod] = ai[2 * nod] + ai[2 * nod + 1];
}

int query(int nod, int p, int u, int val) {
    ai[nod] --;
    if (p == u)
        return p;
    int m = (p + u) / 2;
    if (ai[2 * nod] >= val)
        return query(2 * nod, p, m, val);
    return query(2 * nod + 1, m + 1, u, val - ai[2 * nod]);
}

void solve() {
    int poz;
    for (int i = n; i >= 1; -- i) {
        poz = query(1, 1, n, a[i]);
        rez[poz] = i;
    }
}

void afis() {
    for (int i = 1; i <= n; ++ i)
        printf("%d\n", rez[i]);
}

int main() {
    read();
    init(1, 1, n);
    solve();
    afis();
    return 0;
}