Cod sursa(job #2845966)

Utilizator VanillaSoltan Marian Vanilla Data 8 februarie 2022 16:27:11
Problema Range minimum query Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.7 kb
#include <bits/stdc++.h>

using namespace std;

const int maxn = 200001;
const int lg = 20;

ifstream in ("rmq.in");
ofstream out ("rmq.out");

int a[maxn];

int sp[maxn][lg];

int query (int l, int r) {
    int el = r - l + 1;
    int base = log2(el);
    return min(sp[l][base], sp[r - (1 << base) + 1][base]);
}

int main() {
    int n, m;
    in >> n >> m;
    for (int i = 0; i < n; i++){
        in >> a[i];
        sp[i][0] = a[i];
    }
    for (int k = 1; k < lg; k++){
        for (int i = 0; i + (1 << k) - 1 < n; i++) {
            sp[i][k] = min(sp[i][k-1], sp[i + (1 << (k - 1))][k-1]);
        }
    }
    while (m--) {
        int l,r;
        in >> l >> r;
        out << query(l, r) << "\n";
    }
}