Cod sursa(job #2668858)

Utilizator KPP17Popescu Paul KPP17 Data 5 noiembrie 2020 16:52:18
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.66 kb
#include <fstream>
#define fisier "rmq"
std::ifstream in(fisier ".in");
std::ofstream out(fisier ".out");
constexpr int log(const int n)
{return n? log(n >> 1) + 1: -1;}
const int N = 100000;
int V[log(N)+1][N];
int main()
{
    int n, m, logN;
    in >> n >> m; logN = log(n);
    for (int i = 0; i < n; i++)
        in >> (*V)[i];
    for (int l = 1; l <= logN; l++)
        for (int i = 0; i + (1<<(l-1)) < n; i++)
            V[l][i] = std::min(V[l-1][i], V[l-1][i + (1<<(l-1))]);
    while (m--)
    {
        int a, b, l;
        in >> a >> b; a--;
        l = log(b - a);
        out << std::min(V[l][a], V[l][b - (1 << l)]) << '\n';
    }
}