Pagini recente » Cod sursa (job #673912) | Cod sursa (job #1446948) | Cod sursa (job #1818456) | Cod sursa (job #1211545) | Cod sursa (job #1215744)
#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 ];
}