Cod sursa(job #2604815)

Utilizator CosminMorarMorar Cosmin Andrei CosminMorar Data 23 aprilie 2020 16:06:32
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.68 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int n, q, rmq[18][100010], lg[100010];

int main() {
    fin >> n >> q;

    for (int i = 1; i <= n; i++)
        fin >> rmq[0][i];

    for (int p = 1; 1 << p <= n; p++)
        for (int j = 1; j + (1 << p) - 1 <= n; j++)
            rmq[p][j] = min(rmq[p - 1][j], rmq[p - 1][j + (1 << (p - 1))]);

    for (int i = 2; i <= n; i++)
        lg[i] = lg[i / 2] + 1;

    while (q--) {
        int a, b;
        fin >> a >> b;
        int diff = b - a + 1;
        fout << min(rmq[lg[diff]][a], rmq[lg[diff]][b - (1 << lg[diff]) + 1]) << '\n';
    }
    return 0;
}