Cod sursa(job #3319749)

Utilizator vlad7654vladimir manescu vlad7654 Data 3 noiembrie 2025 09:05:10
Problema Schi Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <bits/stdc++.h>
using namespace std;
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[node]>=val){
            return query(val, left, mid, 2*node);
        }else{
            return query(val, mid+1, right, 2*node+1);
        }
    }
};
int main(){
    cin>>n;
    v.resize(n+1);
    ans.resize(n+1);
    AINT aint;
    for(int i=1;i<=n;i++){
        cin>>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++){
        cout<<ans[i]<<'\n';
    }
}