Cod sursa(job #2769297)

Utilizator cezar_titianuTitianu Cezar cezar_titianu Data 14 august 2021 16:16:09
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.82 kb
#include <fstream>
#include <cmath>

int vec[18][100005];

int main()
{
    std::ifstream fin("rmq.in");
    std::ofstream fout("rmq.out");
    int nrn, nrm, nr1, nr2;
    int sav;
    fin >> nrn >> nrm;
    for (int index = 0; index < nrn; index++) {
        fin >> vec[0][index];
    }
    for (int index = 0; 1 << (index + 1) <= nrn; index++) {
        for (int index2 = 0; index2 <= nrn - (1 << index); index2++) {
            vec[index + 1][index2] = std::min(vec[index][index2], vec[index][index2 + (1 << index)]);
        }
    }
    for (int index = 0; index < nrm; index++) {
        fin >> nr1 >> nr2;
        nr1--;
        nr2--;
        sav = -1;
        for (int dif = nr2 - nr1 + 1; dif; dif >>= 1, sav++);
        fout << std::min(vec[sav][nr1], vec[sav][nr2 - (1 << sav) + 1]) << '\n';
    }
}