Cod sursa(job #2973251)

Utilizator nicuhasCemartan Nicolae nicuhas Data 31 ianuarie 2023 16:57:12
Problema Schi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <bits/stdc++.h>

using namespace std;
const int N=1<<16,NMAX=3e4;
ifstream fin("schi.in");
ofstream fout("schi.out");
int aint[N],clasament[NMAX+1],v[NMAX+1];
void constr(int p,int st,int dr){
    if(st==dr){
        aint[p]=1;
        return;
    }
    int m=(st+dr)/2,fs=2*p,fd=2*p+1;
    constr(fs,st,m);
    constr(fd,m+1,dr);
    aint[p]=aint[fs]+aint[fd];
}
int pozitie(int p,int st,int dr,int conc){
    if(st==dr){
        aint[p]--;
        return st;
    }
    int m=(st+dr)/2,fs=2*p,fd=2*p+1,rez;
    if(aint[fs]>=conc){
        rez=pozitie(fs,st,m,conc);
    }
    else{
        rez=pozitie(fd,m+1,dr,conc-aint[fs]);
    }
    aint[p]--;
    return rez;
}
int main(){
    int n,i;
    fin>>n;
    constr(1,1,n);
    for(i=1;i<=n;i++){
        fin>>v[i];
    }
    for(i=n;i>=1;i--){
        clasament[pozitie(1,1,n,v[i])]=i;
    }
    for(i=1;i<=n;i++){
        fout<<clasament[i]<<"\n";
    }
    return 0;
}