Pagini recente » Cod sursa (job #70507) | Cod sursa (job #3168132) | Cod sursa (job #1769423) | Cod sursa (job #1239811) | Cod sursa (job #2705805)
#include <fstream>
#define f in
#define g out
using namespace std;
ifstream in ( "schi.in" );
ofstream out( "schi.out" );
int n, i, x, ind;
int v[30300], aint[13000], poz[30300];
void build ( int nod, int st, int dr ){
if ( st == dr )
aint[nod] = 1;
else {
int mid = (st+dr)/2;
build(2*nod, st, mid);
build(2*nod+1, mid+1, dr);
aint[nod] = aint[2*nod]+aint[2*nod+1];
}
}
int query ( int nod, int st, int dr, int loc ){
if ( st == dr )
return st;
int mid = (st+dr)/2;
if ( aint[2*nod] >= loc )
return query(2*nod, st, mid, loc);
return query(2*nod+1, mid+1, dr, loc-aint[2*nod]);
}
void update ( int nod, int st, int dr, int p ){
if ( st == dr )
aint[nod]--;
else {
int mid = (st+dr)/2;
if ( p <= mid )
update(2*nod, st, mid, p);
else update(2*nod+1, mid+1, dr, p);
aint[nod] = aint[2*nod]+aint[2*nod+1];
}
}
int main() {
f>>n;
for ( i=1; i <= n; i++ )
f>>v[i];
build ( 1, 1, n );
for ( i=n; i; i-- ){
ind = query ( 1, 1, n, v[i] );
update ( 1, 1, n, ind );
poz[ind] = i;
}
for ( i=1; i <= n; i++ )
g<<poz[i]<<"\n";
return 0;
}