Cod sursa(job #827441)

Utilizator brainwashed20Alexandru Gherghe brainwashed20 Data 2 decembrie 2012 01:21:49
Problema Schi Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.27 kb
#include<cstdio>

#define Nmax 32768

int N, poz, val, aint[Nmax], pinit[Nmax], pfinal[Nmax];

void update(int nod, int st, int dr) {

    if(st == dr) {
        aint[nod] = val;
        return;
    }

    int mij = (st+dr)/2;
    if(poz<=mij)
        update(nod*2, st, mij);
    else
        update(nod*2+1, mij+1, dr);

    aint[nod] = aint[nod*2] + aint[nod*2+1];
}

void query(int nod, int st, int dr, int sum) {

    if(st == dr)
        poz = st;
    else {
        int mij = (st+dr)/2;
        if(aint[nod*2] >= sum)
            query(nod*2, st, mij, sum);
        else
            query(nod*2+1, mij+1, dr, sum-aint[nod*2]);
    }
}

void read_data() {

    freopen("schi.in","r",stdin);
    int i;

    scanf("%d",&N);
    for(i=1; i<=N; ++i) {
        scanf("%d",&pinit[i]);
        poz = i;
        val = 1;
        update(1, 1, N);
    }
}

void solve() {

    int i;

    val = 0;
    for(i=N; i>=1; --i) {
        query(1, 1, N, pinit[i]);
        pfinal[poz] = i;
        update(1, 1, N);
    }
}

void print_data() {

    freopen("schi.out","w",stdout);
    int i;

    for(i=1; i<=N; ++i)
        printf("%d\n",pfinal[i]);
}

int main() {

    read_data();
    solve();
    print_data();

    return 0;
}