Cod sursa(job #3375270)

Utilizator RegeleOu3433Calin V. Dragos Andrei RegeleOu3433 Data 11 noiembrie 2026 11:58:17
Problema Schi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <bits/stdc++.h>

using namespace std;

const int MAXN = 3e4;
int poz[MAXN + 1] , aint[4 * MAXN + 1] , clas[MAXN + 1];
void update ( int nod , int st , int dr , int poz , int val ) {
    if ( st == dr ) {
        aint[nod] += val;
        return;
    }
    int mij = ( st + dr ) / 2;
    if ( poz <= mij )
        update ( nod * 2 , st , mij , poz , val  );
    if ( poz > mij )
        update ( nod * 2 + 1 , mij + 1 , dr , poz , val );
    aint[nod] = aint[nod * 2] + aint[nod * 2 + 1];
}
int cautbin ( int nod , int st , int dr , int v ) {
    if ( st == dr )
        return st;
    int mij = ( st + dr ) / 2;
    if ( aint[nod * 2] < v )
        return cautbin ( nod * 2 + 1 , mij + 1 , dr , v - aint[nod * 2] );
    return cautbin ( nod * 2 , st , mij , v );
}
int main( ) {
    ifstream cin ( "schi.in" );
    ofstream cout ( "schi.out" );
    int n , i , v;

    cin >> n;
    for ( i = 1 ; i <= n ; i++ ) {
        cin >> poz[i];
        update ( 1 , 1 , n , i , 1 );
    }
    for ( i = n ; i > 0 ; i-- ) {
        clas[v = cautbin ( 1 , 1 , n , poz[i] )] = i;
        update ( 1 , 1 , n , v , -1 );
    }
    for ( i = 1 ; i <= n ; i++ )
        cout << clas[i] << '\n';
    return 0;
}