Cod sursa(job #3245227)

Utilizator TeddyDinutaDinuta Eduard Stefan TeddyDinuta Data 27 septembrie 2024 23:03:40
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.73 kb
#include <bits/stdc++.h>

using namespace std;
ifstream in("rmq.in");
ofstream out("rmq.out");

int n, m, l, r;

int main() {
    in >> n >> m;
    vector<int> v(n + 1);

    for (int i = 1; i <= n; i++) {
        in >> v[i];
    }

    vector<vector<int>> dp(n + 1, vector<int>(30, 0));

    for (int i = 1; i <= n ; i++)
        dp[i][0] = v[i];

    for (int p = 1; (1 << p) <= n; p++) {
        for (int i = 1; i + (1 << p) - 1 <= n; i++) {
            dp[i][p] = min(dp[i][p - 1], dp[i + (1 << (p - 1))][p - 1]);
        }
    }

    while (m--) {
        in >> l >> r;
        int len = (r - l + 1);
        int pw = log2(len);
        int rest = len - (1 << pw);

        out << min(dp[l][pw], dp[l + rest][pw]) << '\n';
    }
    return 0;
}