Cod sursa(job #3363043)

Utilizator CorvinJudge0Corvin Judge CorvinJudge0 Data 14 august 2026 08:12:45
Problema Schi Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.65 kb
#include <bits/stdc++.h>

using namespace std;

const int MAXN = 3e4;
int itr[MAXN + 1] , aint[4 * MAXN + 1] , loc[MAXN + 1] , ord[MAXN + 1];
void build ( int nod , int st , int dr ) {
    if ( st == dr )
        aint[nod] = 1;
    else {
        int mij;

        mij = ( st + dr ) / 2;
        build ( nod * 2 , st , mij );
        build ( nod * 2 + 1 , mij + 1 , dr );
        aint[nod] = aint[nod * 2] + aint[nod * 2 + 1];
    }
}
int cautbin ( int nod , int st , int dr , int val ) {
    if ( st > dr )
        return 0;
    if ( st == dr )
        return st;
    int mij , jumu;

    mij = ( st + dr ) / 2;
    jumu = cautbin ( 2 * nod , st , mij , val );
    if ( aint[2 * nod] < val )
        return cautbin ( 2 * nod + 1 , mij + 1 , dr , val - aint[2 * nod] );
    return jumu;
}
void update ( int nod , int st , int dr , int poz ) {
    if ( st == dr )
        aint[nod] = 0;
    else {
        int mij;

        mij = ( st + dr ) / 2;
        if ( poz <= mij )
            update ( 2 * nod , st , mij , poz );
        else
            update ( 2 * nod + 1 , mij + 1 , dr , poz );
        aint[nod] = aint[2 * nod] + aint[2 * nod + 1];
    }
}
int main () {
    ifstream fin ( "schi.in" );
    ofstream fout ( "schi.out" );
    ios_base :: sync_with_stdio ( 0 );
    fin.tie ( 0 );
    fout.tie ( 0 );
    int n , i , adp;

    fin >> n;
    for ( i = 1 ; i <= n ; i++ )
        fin >> itr[i];
    build ( 1 , 1 , n );
    for ( i = n ; i > 0 ; i-- ) {
        // caut binar al loc[i]-lea 1.
        adp = cautbin ( 1 , 1 , n , itr[i] );
        update ( 1 , 1 , n , adp );
        ord[adp] = i;
    }
    for ( i = 1 ; i <= n ; i++ )
        fout << ord[i] << '\n';
    return 0;
}