Cod sursa(job #3330541)

Utilizator vlad_binVlad Bintintan vlad_bin Data 20 decembrie 2025 09:36:38
Problema Range minimum query Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.79 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<int> input(n);
    for (auto &x : input)
        cin >> x;
    
    int max_lg = __lg(n);
    vector<vector<int>> rmq(max_lg + 1);
    rmq[0] = move(input);
    for (int k = 0; k < max_lg; k++)
    {
        int len = 1 << k;
        vector<int> vec(n - (len<<1) + 1);
        for (int j = 0; auto& elem : vec)
        {
            elem = min(rmq[k][j], rmq[k][j + len]);
            j++;
        }
        rmq[k + 1] = move(vec);
    }

    while (m--)
    {
        int a, b;
        cin >> a >> b;
        int len = b - a + 1;
        int len_lg = __lg(len);
        cout << min(rmq[len_lg][a], rmq[len_lg][b - (1<<len_lg)]) << '\n';
    }
}