Pagini recente » Cod sursa (job #2431884) | Cod sursa (job #2153391) | Cod sursa (job #1726262) | Monitorul de evaluare | Cod sursa (job #1259693)
#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;
}