Cod sursa(job #3241665)

Utilizator SSKMFSS KMF SSKMF Data 2 septembrie 2024 08:20:35
Problema Schi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.02 kb
#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;
}