Cod sursa(job #607179)

Utilizator SpiderManSimoiu Robert SpiderMan Data 10 august 2011 23:11:40
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
# include <cstdio>

const char *FIN = "schi.in", *FOU = "schi.out";
const int MAX = 30005;

int N, cnt, V[MAX], T[MAX], poz[MAX];

inline void update (int nod) {
    for (; nod <= N; nod += nod & -nod)
        ++T[nod];
}

inline int query (int nod) {
    int sum = nod;
    for (--nod; nod > 0; nod -= nod & -nod)
        sum -= T[nod];
    return sum;
}

int main (void) {
    freopen (FIN, "r", stdin);
    freopen (FOU, "w", stdout);

    scanf ("%d", &N);
    for (int i = 1; i <= N; ++i)
        scanf ("%d", V + i);
    for (cnt = 1; cnt << 1 <= N; cnt <<= 1);
    for (int i = N, j, k; i; --i) {
        for (j = 1, k = cnt; k; k >>= 1)
            if (j + k <= N && query (j + k) <= V[i])
                j += k;
        poz[j] = i, update (j);
    }
    for (int i = 1; i <= N; ++i)
        printf ("%d\n", poz[i]);
}