Pagini recente » Cod sursa (job #1145405) | Cod sursa (job #633142) | Cod sursa (job #1778233) | Cod sursa (job #991065) | Cod sursa (job #1242694)
#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;
}