Cod sursa(job #1242694)

Utilizator xtreme77Patrick Sava xtreme77 Data 14 octombrie 2014 21:27:22
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 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 aib [ MAX ] , n , place [ MAX ] , v [ MAX ] ;

void UPDATE ( int poz , int val )
{
    for ( ; poz <= n ; poz += poz & -poz )
        aib [ poz ] += val ;
}

int CAUT ( int x )
{
    int i , step ;
    for ( step = 1 ; step < n ; step <<= 1 ) ;
    for ( i = 0 ; step ; step >>= 1 )
        if ( i + step <= n and aib [ i + step ] <= x )
        {
            x -= aib [ i + step ] ;
            i += step ;

        }
    return i ;
}

int main(              )
{
    fin >> n ;
    for ( int i = 1 ; i <= n ; ++ i )
    {
        fin >> v [ i ] ;
        UPDATE ( i , 1 ) ;
    }
    for ( int i = n ; i >= 1 ; -- i )
    {
        int q ;
        place [ q = CAUT ( v [ i ] - 1 ) + 1 ] = i ;
        UPDATE ( q , - 1 ) ;
    }
    for ( int i = 1 ; i <= n ; ++ i )
        fout << place [ i ] << '\n' ;
    return 0;
}