Pagini recente » Cod sursa (job #280448) | Cod sursa (job #1480459) | Cod sursa (job #2752729) | Cod sursa (job #337615) | Cod sursa (job #3241665)
#include <fstream>
using namespace std;
ifstream cin ("schi.in");
ofstream cout ("schi.out");
int sir[30001] , arbore[30001] , rezultat[30001];
int main ()
{
int lungime;
cin >> lungime;
for (int indice = 1 ; indice <= lungime ; indice++)
{ cin >> sir[indice]; arbore[indice] = (indice & -indice); }
for (int indice = lungime ; indice ; indice--)
{
int inlocuitor = 0;
for (int putere = (1 << 14) , suma = 0 ; putere ; putere >>= 1) {
if ((inlocuitor | putere) <= lungime && suma + arbore[inlocuitor | putere] < sir[indice])
{ suma += arbore[inlocuitor |= putere]; }
}
inlocuitor++;
rezultat[inlocuitor] = indice;
for ( ; inlocuitor <= lungime ; inlocuitor += (inlocuitor & -inlocuitor))
{ arbore[inlocuitor]--; }
}
for (int indice = 1 ; indice <= lungime ; indice++)
{ cout << rezultat[indice] << '\n'; }
cout.close(); cin.close();
return 0;
}