Cod sursa(job #3319750)

Utilizator vlad7654vladimir manescu vlad7654 Data 3 noiembrie 2025 09:06:41
Problema Schi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("schi.in");
ofstream fout("schi.out");
const int NMAX=30000;
vector<int> v, ans;
    int n;
struct AINT{
    int arbore[4*NMAX+5];
    void update(int poz, int val, int left=1, int right=n, int node=1){
        if(left==right){
            arbore[node]=val;
            return;
        }
        int mid=(left+right)/2;
        if(poz<=mid){
            update(poz, val, left, mid, 2*node);
        }else{
            update(poz, val, mid+1, right, 2*node+1);
        }
        arbore[node]=arbore[2*node]+arbore[2*node+1];
    }
    int query(int val, int left=1, int right=n, int node=1){
        if(left==right){
            return left;
        }
        int mid=(left+right)/2;
        if(arbore[2*node]>=val){
            return query(val, left, mid, 2*node);
        }else{
            return query(val-arbore[2*node], mid+1, right, 2*node+1);
        }
    }
};
int main(){
    fin>>n;
    v.resize(n+1);
    ans.resize(n+1);
    AINT aint;
    for(int i=1;i<=n;i++){
        fin>>v[i];
        aint.update(i, 1);
    }
    for(int i=n;i>=1;i--){
        int poz=aint.query(v[i]);
        aint.update(poz, 0);
        ans[poz]=i;
    }
    for(int i=1;i<=n;i++){
        fout<<ans[i]<<'\n';
    }
}