Cod sursa(job #3319786)

Utilizator TLuca2021Teodorescu Luca Nicolae TLuca2021 Data 3 noiembrie 2025 11:32:34
Problema Schi Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.29 kb
//schi-infoarena
#include<bits/stdc++.h>
using namespace std;

ifstream fin("schi.in");
ofstream fout("schi.out");

const int NMAX = 30000;
vector<int> v(NMAX + 1);
vector<int> ans(NMAX + 1);
vector<int> segment_tree(4 * NMAX + 5);

void AINT(int node, int left, int right){
    if(left == right){
        segment_tree[node] = 1;
    }
    else{
        segment_tree[node] = right - left + 1;
        int mid = (left + right) / 2;
        AINT(2 * node, left, mid);
        AINT(2 * node + 1, mid + 1, right);
    }

}

int update(int node, int left, int right, int k, int i){
    if(left == right){
       segment_tree[node]--;
       ans[left] = i;
    }
    else{
        int mid = (left + right) / 2;
        if(k <= segment_tree[2 * node]){
            segment_tree[node]--;
            update(2 * node, left, mid, k, i);
        }
        else{
            segment_tree[node]--;
            update(2 * node + 1, mid + 1, right, k - segment_tree[2 * node], i);
        }
    }
}
int main(){
    int n;
    fin >> n;
    for(int i = 1; i <= n; i++){
        fin >> v[i];
    }
    AINT(1, 1, n);
    for(int i = n; i >= 1; i--){
        update(1, 1, n, v[i], i);
    }
    for(int i = 1; i <= n; i++){
        fout << ans[i] << '\n';
    }
    return 0;
}