Cod sursa(job #3347544)

Utilizator M132M132 M132 M132 Data 17 martie 2026 10:38:54
Problema Schi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.35 kb
#include <bits/stdc++.h>

using namespace std;

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

const int NMAX = 30000;
int aint[4*NMAX], n, v[NMAX], i, sol[NMAX];

void build(int nod, int st, int dr)
{
    if(st == dr)
        aint[nod] = 1;
    else
    {
        int mij = (st + dr) / 2;
        build(2 * nod, st, mij);
        build(2 * nod + 1, mij + 1, dr);
        aint[nod] = aint[2 * nod] + aint[2 * nod + 1];
    }
}

int query(int nod, int st, int dr, int x)
{
    if(st == dr)
        return st;
    int mij = (st + dr) / 2;
    if(x <= aint[2 * nod])
        return query(2 * nod, st, mij, x);
    else
        return query(2 * nod + 1, mij + 1, dr, x - aint[2 * nod]);

}

void update(int nod, int st, int dr, int poz)
{
    if(st == dr)
        aint[nod] = 0;
    else
    {
        int mij = (st + dr) / 2;
        if(poz <= mij)
            update(2 * nod, st, mij, poz);
        else
            update(2 * nod + 1, mij + 1, dr, poz);
        aint[nod] = aint[2 * nod] + aint[2 * nod + 1];
    }
}

int main()
{
    f >> n;
    for(i = 1; i <= n; ++i)
        f >> v[i];
    build(1, 1, n);
    for(i = n; i >= 1; --i)
    {
        int poz = query(1, 1, n, v[i]);
        sol[poz] = i;
        update(1, 1, n, poz);
    }
    for(i = 1; i <= n; ++i)
        g << sol[i] << "\n";
    return 0;
}