Cod sursa(job #2873154)

Utilizator apocal1ps13Stefan Oprea Antoniu apocal1ps13 Data 18 martie 2022 19:08:30
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.72 kb
#include<iostream>
#include<fstream>
using namespace std;
const int NMAX = 1e5 + 1;
const int LOG = 19;
int a[NMAX], m[NMAX][LOG];
ifstream in("rmq.in");
ofstream out("rmq.out");
int rmq(int l, int r) {
    int k = 0;
    while ((1 << (k + 1)) <= r - l + 1) k++;
    return min(m[l][k], m[r - (1 << k) + 1][k]);
}int n, query;
int main() {
    in >> n >> query;
    for (int i = 1; i <= n; i++) in >> a[i], m[i][0] = a[i];
    for (int j = 1; j <= LOG; j++)
        for (int i = 1; i + (1 << j) - 1 <= n; i++)
            m[i][j] = min(m[i][j - 1], m[i + (1 << (j - 1))][j - 1]);
    for (int i = 1; i <= query; i++) {
        int u, v;
        in >> u >> v;
        out << rmq(u, v) << '\n';
    }
    return 0;
}