Cod sursa(job #2758176)

Utilizator linte_robertLinte Robert linte_robert Data 8 iunie 2021 19:40:18
Problema Schi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <iostream>
#include <fstream>
using namespace std;
const int maxim = 30001;
int n,i,v[maxim],arb_int[4*maxim],sol[maxim];
void build(int nod,int st,int dr){
    if (st == dr)
        arb_int[nod] = 1;
    else{
        int mid = (st+dr)/2;
        build(2*nod,st,mid);
        build(2*nod+1,mid+1,dr);
        arb_int[nod]=arb_int[2*nod]+arb_int[2*nod+1];
    }
}
void update(int nod,int st,int dr,int poz,int val) {
    if (st == dr){
        arb_int[nod] = 0;
        sol[st] = val;
    }
    else{
        int mid = (st+dr)/2;
        if( poz <= arb_int[2*nod] )
            update(2*nod,st,mid, poz,val);
        else
            update(2*nod+1,mid+1,dr,poz-arb_int[2*nod],val);
        arb_int[nod] = arb_int[2*nod] + arb_int[2*nod+1];
    }
}
int main() {
    ifstream fin("schi.in");
    ofstream fout("schi.out");
    fin >> n;
    for( i = 1; i <= n; i++){
        fin >> v[i];
    }
    build(1,1,n);
    for ( i = n; i >= 1; i-- ){
        update(1,1,n,v[i],i);
    }
    for ( i = 1; i <= n; i++ ){
        fout << sol[i] << "\n";
    }
}