Cod sursa(job #2723034)

Utilizator CiboAndreiAndrei Cibo CiboAndrei Data 13 martie 2021 14:55:18
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.75 kb
#include <bits/stdc++.h>

using namespace std;

int main() {
    ifstream cin("rmq.in");
    ofstream cout("rmq.out");

    int n, m;
    cin >> n >> m;

    vector < vector <int> > w(20);
    w[0].resize(n);
    for (auto& it : w[0]) {
        cin >> it;
    }

    vector <int> Log2(n + 5, 0);

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

    for (int i = 1; (1 << i) <= n; ++i) {
        w[i].resize(n);

        for (int j = 0; j + (1 << i) - 1 < n; ++j)
            w[i][j] = min(w[i - 1][j], w[i - 1][j + (1 << (i - 1))]);
    }

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

        int k = Log2[y - x + 1];

        cout << min(w[k][x], w[k][y - (1 << k) + 1]) << '\n';
    }

    return 0;
}