Cod sursa(job #3042145)

Utilizator SSKMFSS KMF SSKMF Data 4 aprilie 2023 09:57:56
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda tot_ Marime 0.99 kb
#include <fstream>
using namespace std;

ifstream cin ("rmq.in");
ofstream cout ("rmq.out");

int tabel[17][100000];

int ln (int numar)
{
    int biti = 0;
    while (numar)
        numar >>= 1 , biti++;

    return biti - 1;
}

int main ()
{
    int lungime , intrebari;
    cin >> lungime >> intrebari;

    for (int indice = 0 ; indice < lungime ; indice++)
        cin >> tabel[0][indice];

    for (int linie = 1 ; (1 << linie) <= lungime ; linie++)
        for (int coloana = 0 ; coloana + (1 << linie) <= lungime ; coloana++)
            tabel[linie][coloana] = min(tabel[linie - 1][coloana] , tabel[linie - 1][coloana + (1 << (linie - 1))]);

    int stanga , dreapta;
    for (int indice = 1 ; indice <= intrebari ; indice++)
    {
        cin >> stanga >> dreapta;
        cout << min(tabel[ln(dreapta - stanga + 1)][stanga - 1] , tabel[ln(dreapta - stanga + 1)][dreapta - (1 << ln(dreapta - stanga + 1))]) << '\n';
    }

    cout.close(); cin.close();
    return 0;
}