Cod sursa(job #2922497)

Utilizator IvanAndreiIvan Andrei IvanAndrei Data 8 septembrie 2022 18:01:08
Problema Schi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <fstream>

using namespace std;

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

const int max_size = 3e4 + 1, max_aint = 12e4 + 1;

int a[max_size], ans[max_size], aint[max_aint];

void init (int l, int r, int nod)
{
    if (l == r)
    {
        aint[nod] = 1;
    }
    else
    {
        int m = (l + r) / 2;
        init(l, m, 2 * nod);
        init(m + 1, r, 2 * nod + 1);
        aint[nod] = aint[2 * nod] + aint[2 * nod + 1];
    }
}

void update (int l, int r, int nod, int poz, int ind)
{
    if (l == r)
    {
        ans[l] = ind;
        aint[nod] = 0;
    }
    else
    {
        int m = (l + r) / 2;
        if (poz <= aint[2 * nod])
        {
            update(l, m, 2 * nod, poz, ind);
        }
        else
        {
            update(m + 1, r, 2 * nod + 1, poz - aint[2 * nod], ind);
        }
        aint[nod] = aint[2 * nod] + aint[2 * nod + 1];
    }
}

int main ()
{
    int n;
    in >> n;
    init(1, n, 1);
    for (int i = 1; i <= n; i++)
    {
        in >> a[i];
    }
    for (int i = n; i > 0; i--)
    {
        int poz = a[i], ind = i;
        update(1, n, 1, poz, ind);
    }
    for (int i = 1; i <= n; i++)
    {
        out << ans[i] << '\n';
    }
    in.close();
    out.close();
    return 0;
}