Cod sursa(job #1259693)

Utilizator gedicaAlpaca Gedit gedica Data 10 noiembrie 2014 13:29:33
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.31 kb
#include <fstream>

using namespace std;

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

const int MAX = 30014 ;

int sol [MAX<<2], v[MAX<<2], pos ,loc[MAX];

void create ( int nod , int st , int dr )
{
    if ( st == dr )
    {
        v [ nod ] = 1 ;
        return ;
    }
    int mij = ( st + dr ) >> 1 ;
    if ( pos <= mij )
        create ( nod << 1 , st , mij );
        else create ( (nod << 1) + 1 , mij + 1 , dr );
    v [ nod ] = v [ nod << 1 ] + v [ (nod << 1) + 1 ] ;
}

void upk ( int nod , int st , int dr , int poz )
{
    if ( st == dr )
    {
        v[ nod ] = 0 ;
        sol [ st ] = pos ;
        return ;
    }
    int mij = ( st + dr ) >> 1 ;
    if ( poz <= v [ nod << 1 ] )
        upk ( nod << 1 , st , mij , poz );
        else upk ( (nod << 1) + 1 , mij + 1 , dr , poz - v [ nod << 1 ] );
    v [ nod ] = v [ nod << 1 ] + v [ ( nod << 1 ) + 1 ];
}

int main( )
{
    int n ;
    in >> n ;
    for ( int i = 1 ; i <= n ; ++ i )
    {
        pos = i ;
        create ( 1 , 1 , n );
    }
    for ( int i = 1 ; i <= n ; ++ i )
        in >> loc [ i ] ;
    for ( int i = n ; i >= 1 ; -- i ){
        pos = i ;
        upk ( 1 , 1 , n , loc [ i ] ) ;
    }
    for ( int i = 1 ; i <= n ; ++ i )
        out << sol [ i ] << '\n' ;
    return 0;
}