Cod sursa(job #2772731)

Utilizator GligarEsterabadeyan Hadi Gligar Data 2 septembrie 2021 16:32:25
Problema Schi Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <fstream>

using namespace std;

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

const int nmax=30000, n2max=(1<<15);

int v[n2max*2], u[nmax+1], sol[nmax+1];

int query(int nod, int l, int r, int ui){
    if(l==r){
        return r;
    }else if((r-l+1)/2-v[nod*2]>=ui){
        return query(nod*2,l,(l+r)/2,ui);
    }else{
        return query(nod*2+1,(l+r)/2+1,r,ui-(r-l+1)/2+v[nod*2]);
    }
}

int main(){
    int n;
    fin>>n;
    for(int i=1;i<=n;i++){
        fin>>u[i];
    }
    int n2=1;
    while(n2<n){
        n2*=2;
    }
    for(int i=n;i>0;i--){
        int x=query(1,1,n2,u[i]);
        sol[x]=i;
        v[n2-1+x]=1;
        for(int j=(n2-1+x)/2;j>=1;j--){
            v[j]=v[j*2]+v[j*2+1];
        }
    }
    for(int i=1;i<=n;i++){
        fout<<sol[i]<<"\n";
    }
    return 0;
}