Cod sursa(job #3356102)

Utilizator iLaurianLaurian Iacob iLaurian Data 29 mai 2026 15:39:09
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.82 kb
#include <fstream>
#include <iterator>
#include <vector>

std::ifstream f ("rmq.in");
std::ofstream g ("rmq.out");

const int MAXN = 1e5 + 1;
const int K = 17;
int st[K + 1][MAXN];

int main() {
    int n, m;
    f >> n >> m;

    std::vector<int> a(n, 0);
    for (int i = 0; i < n; ++i) {
        f >> a[i];
    }

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

    std::copy(a.begin(), a.end(), st[0]);
    for (int i = 1; i <= K; ++i)
        for (int j = 0; j + (1 << i) <= n; ++j)
            st[i][j] = std::min(st[i - 1][j], st[i - 1][j + (1 << (i - 1))]);

    int l, r;
    for (int i = 0; i < m; ++i) {
        f >> l >> r;
        int idx = lg[r - l + 1];
        int mini = std::min(st[idx][l - 1], st[idx][r - (1 << idx)]);
        g << mini << "\n";
    }

    return 0;
}