Cod sursa(job #1788215)

Utilizator BlackLordFMI Alex Oprea BlackLord Data 25 octombrie 2016 19:59:34
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <fstream>

using namespace std;

ifstream fin("schi.in");
ofstream fout("schi.out");

const int N = 30010;

int n, i, j, v[N], s[N], a[4*N];

void go(int st, int dr, int nod) {
    if (st == dr) {
        a[nod] = 1;
        return;
    }
    int mij = (st + dr) >> 1;
    go(st, mij, (nod << 1));
    go(mij + 1, dr, (nod << 1) + 1);
    a[nod] = a[(nod << 1)] + a[(nod << 1) + 1];
}

int querry(int st, int dr, int nod, int x) {
    if (st == dr) {
        a[nod] = 0;
        return st;
    }
    int mij = (st + dr) >> 1, r;
    if (a[(nod << 1)] >= x) {
        r = querry(st, mij, (nod << 1), x);
    } else {
        r = querry(mij+1, dr, (nod << 1) + 1, x - a[(nod << 1)]);
    }
    a[nod] = a[(nod << 1)] + a[(nod << 1) + 1];
    return r;
}

int main() {
    fin >> n;
    for (i = 1; i <= n; ++i)
        fin >> v[i];
    go(1, n, 1);
    for (i = n; i > 0; --i)
        s[ querry(1, n, 1, v[i]) ] = i;
    for (i = 1; i <= n; ++i)
        fout << s[i] << "\n";
    return 0;
}