Cod sursa(job #1052438)

Utilizator mihail.jianuJianu Mihail mihail.jianu Data 11 decembrie 2013 12:10:03
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
# include <cstdio>

const int N = 30000;

int t [1 << 16];
int v [N + 1];
int c [N + 1];
int start, poz, n;

void fisiere ()
{
    freopen ("schi.in", "r", stdin);
    freopen ("schi.out", "w", stdout);
}

void update (int p)
{
    while (p != 1)
    {
        p /= 2;
        t [p] = t [p * 2] + t [p * 2 + 1];
    }
}

void calcul (int p, int st, int dr)
{
    if (st == dr)
    {
        v [st] = start;
        t [p] = 1;
        update (p);
        return;
    }

    int m = (st + dr) / 2;

    if (poz <= m - st - t [2 * p] + 1)
        calcul (2 * p, st, m);
    else
    {
        poz -= m - st - t [2 * p] + 1;
        calcul (2 * p + 1, m + 1, dr);
    }
}

void init ()
{
    int i;

    fisiere ();

    scanf ("%d", & n);

    for (i = 1; i <= n; i ++)
        scanf ("%d", & c [i]);

    for (i = n; i >= 1; i --)
    {
        poz = c [i];
        start = i;
        calcul (1, 1, n);
    }
}

void afis ()
{
    int i;

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

int main ()
{
    init ();

    afis ();

    return 0;
}