Pagini recente » Cod sursa (job #203159) | Cod sursa (job #2846217) | Cod sursa (job #1218351) | Cod sursa (job #2141952) | Cod sursa (job #3138289)
#include <fstream>
using namespace std;
ifstream fin("schi.in");
ofstream fout("schi.out");
int v[30000], arb[60001], n;
void adaugare(int poz, int l, int r, int i, int sarite){
if( poz >= n ){
arb[poz] = i+1;
return;
}
int mij = ( l + r ) / 2;
if( mij - l + 1 - arb[2*poz] + sarite >= v[i] ){
adaugare(2*poz, l, mij, i, sarite);
}
else{
adaugare(2*poz+1, mij+1, r, i, sarite + mij - l + 1 - arb[2*poz]);
}
arb[poz]++;
}
void afis(int poz, int l, int r){
if( l == r ){
fout<<arb[poz]<<'\n';
return;
}
int mij = (l + r) / 2;
afis(2 * poz, l, mij);
afis(2*poz+1, mij+1, r);
}
int main()
{
int i;
fin>>n;
for( i = 0; i < n; i++ )
fin>>v[i];
for( i = n - 1; i >= 0; i-- ){
adaugare(1, 1, n, i, 0);
}
afis(1, 1, n);
return 0;
}