Cod sursa(job #2811874)

Utilizator CristeaCristianCristea Cristian CristeaCristian Data 3 decembrie 2021 13:55:34
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.75 kb
#include <fstream>

using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
const int NMAX = 100000, KMAX = 25;
int rmq[NMAX + 5][KMAX + 1], v[NMAX + 5], log[NMAX + 5];
int main()
{
    int n, m, i, j, l, r;
    fin >> n >> m;
    for(i = 2; i <= NMAX; i++)
        log[i] = log[i / 2] + 1;
    for(i = 0; i < n; i++)
    {
        fin >> v[i];
        rmq[i][0] = v[i];
    }
    for(j = 1; j <= KMAX; j++)
        for(i = 0; i + (1 << j) <= NMAX; i++)
            rmq[i][j] = min(rmq[i][j-1], rmq[i + (1 << (j - 1))][j-1]);
    for(i = 1; i <= m; i++)
    {
        fin >> l >> r;
        l--;
        r--;
        j = log[r - l + 1];
        fout << min(rmq[l][j], rmq[r - (1 << j) + 1][j]) << '\n';
    }
    return 0;
}