Cod sursa(job #3250515)

Utilizator catalinmarincatalinmarin catalinmarin Data 21 octombrie 2024 16:19:56
Problema Schi Scor 75
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <fstream>
using namespace std;
ifstream fin("schi.in");
ofstream fout("schi.out");
int n;
int v[int(3e4) + 5];
int ans[int(3e4) + 5];
int aint[int(2 * 3e4) + 5];
void build(int curr_pos, int left, int right){
    if (left == right){
        aint[curr_pos] = 1;
        return;
    }
    int mid = (left + right) / 2;
    build(2 * curr_pos, left, mid);
    build(2 * curr_pos + 1, mid + 1, right);
    aint[curr_pos] = aint[2 * curr_pos] + aint[2 * curr_pos + 1];
}
void query_update(int curr_pos, int left, int right, int val, int concurent){
    if (left == right){
        aint[curr_pos] = 0;
        ans[left] = concurent;
        return;
    }
    int mid = (left + right) / 2;
    if (aint[2 * curr_pos] < val){
        query_update(2 * curr_pos + 1, mid + 1, right, val - aint[2 * curr_pos], concurent);
    } else {
        query_update(2 * curr_pos, left, mid, val, concurent);
    }
    aint[curr_pos] = aint[2 * curr_pos] + aint[2 * curr_pos + 1];
}
int main(){
    fin >> n;
    for (int i = 1; i <= n; i++){
        fin >> v[i];
    }
    build(1, 1, n);
    for (int i = n; i >= 1; i--){
        query_update(1, 1, n, v[i], i);
    }
    for (int i = 1; i <= n; i++){
        fout << ans[i] << '\n';
    }
    return 0;
}