Pagini recente » Cod sursa (job #1046959) | Borderou de evaluare (job #367041) | Cod sursa (job #868149) | Cod sursa (job #62674) | Cod sursa (job #1335361)
#include <fstream>
using namespace std;
ifstream fin("schi.in");
ofstream fout("schi.out");
const int nmax= 30000;
int n;
int v[nmax+1], ft[nmax+1], ans[nmax+1];
int bs( int val ) {
int sol= 0, n2;
for ( n2= 1; n2<=n; n2*= 2 ) ;
for ( int step= n2; step>0; step/= 2 ) {
if ( sol+step<=n && ft[sol+step]<val ) {
val= val-ft[sol+step];
sol+= step;
}
}
++sol;
return sol;
}
void ft_update( int p, int x ) {
for ( int i= p; i<=n; i= 2*i-(i&(i-1)) ) {
ft[i]+= x;
}
}
int main( ) {
fin>>n;
for ( int i= 1; i<=n; ++i ) {
ft_update(i, 1);
fin>>v[i];
}
for ( int i= n; i>=1; --i ) {
int aux= bs(v[i]);
ans[aux]= i;
ft_update(aux, -1);
}
for ( int i= 1; i<=n; ++i ) {
fout<<ans[i]<<"\n";
}
return 0;
}