Cod sursa(job #1215744)

Utilizator xtreme77Patrick Sava xtreme77 Data 2 august 2014 02:12:04
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.47 kb
#include <fstream>

const char IN [ ] = "schi.in";
const char OUT [ ] = "schi.out";
const int MAX = 30014 ;

using namespace std;

ifstream fin ( IN ) ;
ofstream fout ( OUT ) ;
int sol [ MAX << 2 ] , v [ MAX << 2 ] , pos , loc [ MAX ];
void create ( int nod , int st , int dr ) ;
void upk ( int nod , int st , int dr , int poz ) ;
int main( )
{
    int n ;
    fin >> n ;
    for ( int i = 1 ; i <= n ; ++ i )
    {
        pos = i ;
        create ( 1 , 1 , n );
    }
    for ( int i = 1 ; i <= n ; ++ i )
        fin >> loc [ i ] ;
    for ( int i = n ; i >= 1 ; -- i ){
        pos = i ;
        upk ( 1 , 1 , n , loc [ i ] ) ;
    }
    for ( int i = 1 ; i <= n ; ++ i )
        fout << sol [ i ] << '\n' ;
    return 0;
}
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 ];
}