Cod sursa(job #1952527)

Utilizator crysstyanIacob Paul Cristian crysstyan Data 4 aprilie 2017 10:48:38
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <fstream>
#define NMAX 30005

using namespace std;

ifstream f("schi.in");
ofstream g("schi.out");

int i, n, aint[4 * NMAX], ans[NMAX], v[NMAX], pos;

void update(int st, int dr, int node)
{
    if (st == dr)
    {
        aint[node] = 1;
        return;
    }

    int mid = (st + dr) / 2;

    update(st, mid, 2 * node);
    update(mid + 1, dr, 2 * node + 1);
    aint[node] = aint[2 * node] + aint[2 * node + 1];
}

void query(int st, int dr, int node, int val)
{
    if (st == dr)
    {
        aint[node] = 0;
        pos = st;
        return;
    }

    int mid = (st + dr) / 2;

    if (val <= aint[2 * node])
        query(st, mid, 2 * node, val);
    else
        query(mid + 1, dr, 2 * node + 1, val - aint[2 * node]);

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

int main()
{
    f >> n;

    for (i = 1; i <= n; ++ i)
        f >> v[i];

    update(1, n, 1);

    for (i = n; i >= 1; -- i)
    {
        query(1, n, 1, v[i]);
        ans[pos] = i;
    }

    for (i = 1; i <= n; ++ i)
        g << ans[i] << '\n';
    return 0;
}