Pagini recente » Cod sursa (job #1100481) | Cod sursa (job #3141720) | Cod sursa (job #2398061) | Cod sursa (job #1193154) | Cod sursa (job #2783327)
#include <stdio.h>
#define MAX_N 30000
int n;
int p[MAX_N], ans[MAX_N + 1], aib[MAX_N + 1];
void updateAIB( int i, int a ) {
while ( i <= n ) {
aib[i] += a;
i += (i & -i);
}
}
int queryAIB( int i ) {
int a;
a = 0;
while ( i > 0 ) {
a += aib[i];
i -= (i & -i);
}
return a;
}
int main() {
FILE *fin, *fout;
int st, dr, mij, i;
fin = fopen( "schi.in", "r" );
fscanf( fin, "%d", &n );
for ( i = 0; i < n; i++ ) {
fscanf( fin, "%d", &p[i] );
updateAIB( i + 1, 1 );
}
fclose( fin );
for ( i = n - 1; i >= 0; i-- ) {
st = 0;
dr = n;
while ( dr - st > 1 ) {
mij = (st + dr) / 2;
if ( queryAIB( mij ) < p[i] )
st = mij;
else
dr = mij;
}
ans[dr] = i + 1;
updateAIB( dr, -1 );
}
fout = fopen( "schi.out", "w" );
for ( i = 1; i <= n; i++ )
fprintf( fout, "%d\n", ans[i] );
fclose( fout );
return 0;
}