Cod sursa(job #3314015)

Utilizator carinamariaCarina Maria Viespescu carinamaria Data 7 octombrie 2025 19:22:10
Problema Schi Scor 70
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <fstream>
using namespace std;
ifstream cin("schi.in");
ofstream cout("schi.out");
int n, poz;
int v[30002], aint[60002], sol[30002];
int query(int nod, int st, int dr, int val){
    if(st==dr){
        return st;
    }
    else{
        int s1=aint[2*nod];
        int s2=aint[2*nod+1];
        int mid=(st+dr)/2;
        if(s1>=val)
            return query(2*nod, st, mid, val);
        else return query(2*nod+1, mid+1, dr, val-s1);
    }
}
void update(int nod, int st, int dr, int poz, int val){
    if(st==dr)
        aint[nod]=val;
    else{
        int mid=(st+dr)/2;
        if(poz<=mid)
            update(2*nod, st, mid, poz, val);
        else update(2*nod+1, mid+1, dr, poz, val);
        aint[nod]=aint[2*nod]+aint[2*nod+1];
    }
}
int main() {
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>v[i];
        update(1, 1, n, i, 1);
    }
    for(int i=n;i>=1;i--){
        //caut prima poz din aint care are suma == v[i];
        poz=query(1, 1, n, v[i]);
        update(1, 1, n, poz, 0);
        sol[poz]=i;
    }
    for(int i=1;i<=n;i++){
        cout<<sol[i]<<"\n";
    }
}