Cod sursa(job #3312889)

Utilizator amalia_ghicaAmalia Ghica amalia_ghica Data 30 septembrie 2025 17:20:30
Problema Schi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <bits/stdc++.h>

using namespace std;
int n, k, p;
int cit[30005];
int v[524300], afis[30005];
inline void update(int poz){
    v[poz] = 0;
    poz /= 2;
    while(poz){
        v[poz] = v[poz * 2] + v[poz * 2 + 1];
        poz /= 2;
    }
}
int query(int poz, int st, int dr, int nr1){
    if(st == dr){
        return poz;
    }
    int mij = (st + dr) / 2;
    if(nr1 <= v[2 * poz]){
        return query(poz * 2, st, mij, nr1);
    }else{
        return query(poz * 2 + 1, mij + 1, dr, nr1 - v[poz * 2]);
    }
}
int main()
{
    ifstream cin("schi.in");
    ofstream cout("schi.out");
    int a;
    cin >> n;
    k = log2(n) + 1;
    p = (1<<k);
    for(int i = p; i < n + p; i++){
        v[i] = 1;
    }
    for(int i = p - 1; i > 0; i--){
        v[i] = v[i * 2] + v[i * 2 + 1];
    }
    for(int i = 0; i < n; i++){
        cin >> cit[i];
    }
    int x;
    for(int i = n - 1; i >= 0; i--){
        a = cit[i];
        x = query(1, 1, p, a);
        afis[x - p] = i;
        update(x);
    }
    for(int i = 0; i < n; i++){
        cout << afis[i] + 1 << "\n";
    }
    return 0;
}