Cod sursa(job #2671631)

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