Cod sursa(job #3263277)

Utilizator vlad_binVlad Bintintan vlad_bin Data 14 decembrie 2024 09:55:42
Problema Range minimum query Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.73 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> date(n);
    for (auto &x : date)
        cin >> x;

    vector<vector<int>> rmq(1 << __lg(n));
    rmq[0] = move(date);

    for (int i = 1; i < rmq.size(); i++) {
        int offset = 1 << (i - 1);
        rmq[i].resize(n);
        for (int j = 0; j + offset < n; j++) {
            rmq[i][j] = min(rmq[i-1][j], rmq[i-1][j + offset]);
        }
    }

    for (int i = 0; i < m ; i++) {
        int l, r;
        cin >> l >> r;
        int dist = r - l + 1;
        int max_pow = __lg(dist);
        cout << min(rmq[max_pow][l], rmq[max_pow][r - (1 << max_pow)]) << endl;
    }
}