Cod sursa(job #3229192)

Utilizator andreifilimonPopescu Filimon Andrei Cosmin andreifilimon Data 14 mai 2024 12:15:42
Problema Schi Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <iostream>

using namespace std;

#define MAXN 300000

int n;

int arb[MAXN * 4];
int v[MAXN + 1], ans[MAXN + 1];

void update(int nod, int st, int dr, int poz, int x)
{
    if (st == dr)
    {
        arb[nod] += x;
        return;
    }

    int mid;
    mid = (st + dr) / 2;
    nod *= 2;
    if (poz <= mid) update(nod, st, mid, poz, x);
    else update(nod + 1, mid + 1, dr, poz, x);
    arb[nod >> 1] = arb[nod] + arb[nod + 1];
}

int query(int nod, int st, int dr, int val)
{
    if (st == dr)
        return st;

    int mij;
    mij = (st + dr) / 2;
    nod *= 2;
    if (arb[nod] < val)
        return query(nod + 1, mij + 1, dr, val - arb[nod]);
    return query(nod, st, mij, val);
}


int main()
{
    cin >> n;
    int i;
    for (i = 1; i <= n; i++)
    {
        cin >> v[i];
        update(1, 1, n, i, 1);
    }

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

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