Cod sursa(job #3338887)

Utilizator Razvan6767Savca Razvan Razvan6767 Data 5 februarie 2026 12:58:59
Problema Schi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <fstream>
#include <vector>
using namespace std;

const int MAXN = 30005;

int poz[MAXN];
int sol[MAXN];    
int tree[4 * MAXN]; 

void build(int nod, int st, int dr) {
    if (st == dr) {
        tree[nod] = 1;
        return;
    }
    
    int mid = (st + dr) / 2;
    build(2 * nod, st, mid);
    build(2 * nod + 1, mid + 1, dr);
    tree[nod] = tree[2 * nod] + tree[2 * nod + 1];
}

int schimb(int nod, int st, int dr, int k) {
    if (st == dr) {
        tree[nod] = 0;
        return st;
    }
    
    int mid = (st + dr) / 2;
    int pos;
    if (tree[2 * nod] >= k) {
        pos = schimb(2 * nod, st, mid, k);
    } else {
        pos = schimb(2 * nod + 1, mid + 1, dr, k - tree[2 * nod]);
    }
    tree[nod] = tree[2 * nod] + tree[2 * nod + 1];
    return pos;
}

int main() {
    ifstream fin("schi.in");
    ofstream fout("schi.out");
    
    int N;
    fin >> N;
    
    for (int i = 1; i <= N; i++) {
        fin >> poz[i];
    }
    build(1, 1, N);
    
    for (int i = N; i >= 1; i--) {
        int position = schimb(1, 1, N, poz[i]);
        sol[position] = i;
    }
    
    for (int i = 1; i <= N; i++) {
        fout << sol[i] << "\n";
    }
    
    return 0;
}