Cod sursa(job #3245913)

Utilizator MihneaStoicaMihnea Teodor Stoica MihneaStoica Data 1 octombrie 2024 08:58:45
Problema Schi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.35 kb
#include <bits/stdc++.h>
//#define int short

using namespace std;

const int lim = 30001;
int lot[lim], aint[lim * 4];

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

void update (int nod, int st, int dr, int pos, int val)
{
    if (st == dr) {
        aint[nod] = 0;
        lot[st] = val;
    }
    else {
        int mid = (st + dr) / 2;
        if (aint[nod * 2 + 1] >= pos) {
            update(nod * 2 + 1, st, mid, pos, val);
        }
        else {
            update(nod * 2 + 2, mid + 1, dr, pos - aint[nod * 2 + 1], val);
        }
        aint[nod] = aint[nod * 2 + 1] + aint[nod * 2 + 2];
    }
}

int32_t main()
{
#ifndef LOCAL
    freopen("schi.in", "r", stdin);
    freopen("schi.out", "w", stdout);
#endif // LOCAL
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    int n; cin >> n;
    bulk (1, 1, n);
    vector<int> v(n + 1);
    for (int i = 1; i <= n; i ++) {
        cin >> v[i];
    }
    for (int i = n; i >= 1; i --) {
        update(1, 1, n, v[i], i);
    }
    for (int i = 1; i <= n; i ++) {
        cout << lot[i] << '\n';
    }
}