Cod sursa(job #3357905)

Utilizator TestLicenta123Test Test TestLicenta123 Data 13 iunie 2026 19:41:45
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.79 kb
#include <iostream>
#include <fstream>
#include <cmath>

const int MAX_SIZE = 100000;
const int LOG = 17;

int main() {
    std::ifstream input("rmq.in");
    std::ofstream output("rmq.out");

    int n, m;
    int a[MAX_SIZE];
    int rmq[MAX_SIZE][LOG];

    input >> n >> m;

    for (int i = 0; i < n; ++i) {
        input >> a[i];
        rmq[i][0] = a[i];
    }

    for (int j = 1; (1 << j) <= n; ++j) {
        for (int i = 0; i + (1 << j) - 1 < n; ++i) {
            rmq[i][j] = std::min(rmq[i][j - 1], rmq[i + (1 << (j - 1))][j - 1]);
        }
    }

    while (m--) {
        int x, y;
        input >> x >> y;
        x--; y--;

        int k = std::log2(y - x + 1);
        int min_val = std::min(rmq[x][k], rmq[y - (1 << k) + 1][k]);
        output << min_val << '\n';
    }

    return 0;
}