Pagini recente » Cod sursa (job #3362516) | Cod sursa (job #3362606) | Cod sursa (job #3362560) | Cod sursa (job #3362523) | Cod sursa (job #3363043)
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 3e4;
int itr[MAXN + 1] , aint[4 * MAXN + 1] , loc[MAXN + 1] , ord[MAXN + 1];
void build ( int nod , int st , int dr ) {
if ( st == dr )
aint[nod] = 1;
else {
int mij;
mij = ( st + dr ) / 2;
build ( nod * 2 , st , mij );
build ( nod * 2 + 1 , mij + 1 , dr );
aint[nod] = aint[nod * 2] + aint[nod * 2 + 1];
}
}
int cautbin ( int nod , int st , int dr , int val ) {
if ( st > dr )
return 0;
if ( st == dr )
return st;
int mij , jumu;
mij = ( st + dr ) / 2;
jumu = cautbin ( 2 * nod , st , mij , val );
if ( aint[2 * nod] < val )
return cautbin ( 2 * nod + 1 , mij + 1 , dr , val - aint[2 * nod] );
return jumu;
}
void update ( int nod , int st , int dr , int poz ) {
if ( st == dr )
aint[nod] = 0;
else {
int mij;
mij = ( st + dr ) / 2;
if ( poz <= mij )
update ( 2 * nod , st , mij , poz );
else
update ( 2 * nod + 1 , mij + 1 , dr , poz );
aint[nod] = aint[2 * nod] + aint[2 * nod + 1];
}
}
int main () {
ifstream fin ( "schi.in" );
ofstream fout ( "schi.out" );
ios_base :: sync_with_stdio ( 0 );
fin.tie ( 0 );
fout.tie ( 0 );
int n , i , adp;
fin >> n;
for ( i = 1 ; i <= n ; i++ )
fin >> itr[i];
build ( 1 , 1 , n );
for ( i = n ; i > 0 ; i-- ) {
// caut binar al loc[i]-lea 1.
adp = cautbin ( 1 , 1 , n , itr[i] );
update ( 1 , 1 , n , adp );
ord[adp] = i;
}
for ( i = 1 ; i <= n ; i++ )
fout << ord[i] << '\n';
return 0;
}