Pagini recente » Cod sursa (job #480790) | Cod sursa (job #3232203) | Cod sursa (job #3278626) | Cod sursa (job #2764593) | Cod sursa (job #2698978)
#include <fstream>
#define left( a ) (a << 1)
#define right( a ) ((a << 1) + 1)
using namespace std;
ifstream fin( "schi.in" );
ofstream fout( "schi.out" );
const int MaxN = 30002;
int x[MaxN], res[MaxN];
int sum[4 * MaxN];
void build( int node, int l, int r ) {
int mid = (l + r) / 2;
sum[node] = r - l + 1;
if ( l == r ) {
return;
}
build( left( node ), l, mid );
build( right( node ), mid + 1, r );
}
int query( int node, int l, int r, int x ) {
int mid = (l + r) / 2, q;
if ( l == r ) {
sum[node] = 0;
return l;
}
if ( sum[left( node )] >= x ) {
q = query( left( node ), l, mid, x );
} else {
q = query( right( node ), mid + 1, r, x - sum[left( node )] );
}
sum[node] = sum[left( node )] + sum[right( node )];
return q;
}
int main() {
int n;
fin >> n;
for ( int i = 1; i <= n; ++i ) {
fin >> x[i];
}
build( 1, 1, n );
for ( int i = n; i > 0; --i ) {
res[query( 1, 1, n, x[i] )] = i;
}
for ( int i = 1; i <= n; ++i ) {
fout << res[i] << "\n";
}
fin.close();
fout.close();
return 0;
}