Cod sursa(job #3301464)

Utilizator ShAwDoRneYNacu Gabriel ShAwDoRneY Data 26 iunie 2025 17:42:59
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.95 kb
#include <iostream>
#include <vector>

using namespace std;

int get_RMQ(int left, int right, vector<vector<int>> &RMQ) {
    int len = right - left + 1;
    int log = 31 - __builtin_clz(len);

    return min(RMQ[left][log], RMQ[right-(1<<log)+1][log]);
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    freopen("rmq.in", "r", stdin);
    freopen("rmq.out", "w", stdout);

    int N,Q;
    cin >> N >> Q;
    vector<int> arr(N+1);
    int log = 31 - __builtin_clz(N);
    vector<vector<int>> RMQ(N+1, vector<int>(log+1));

    for (int i=1; i<=N; i++) {
        cin >> arr[i];
        RMQ[i][0] = arr[i];
    }

    for (int pow=1; pow<=log; pow++) {
        for (int i=1; i+(1<<pow)-1 <= N; i++) {
            RMQ[i][pow] = min(RMQ[i][pow-1], RMQ[i+(1<<(pow-1))][pow-1]);
        }
    }

    for (int i=1; i<=Q; i++) {
        int left, right;
        cin >> left >> right;
        cout << get_RMQ(left, right, RMQ) << "\n";
    }

    return 0;
}