Cod sursa(job #3306948)

Utilizator radeuojArghira Radu Stefan radeuoj Data 15 august 2025 14:41:05
Problema Range minimum query Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.9 kb
#include <bits/stdc++.h>
using namespace std;

constexpr int NMAX = 2e5, LOGN = 20;

int n, v[NMAX + 1];
long long spt[LOGN + 1][NMAX + 1];

void init_spt() {
    copy(v, v + n + 1, spt[0]);

    for (int i = 1; i <= LOGN; i++) {
        for (int j = 1; j + (1 << i) - 1 <= n; j++) {
            spt[i][j] = min(spt[i - 1][j], spt[i - 1][j + (1 << (i - 1))]);
        }
    }
}

long long query(int a, int b) {
    long long minimum = LLONG_MAX;
    for (int i = LOGN; i >= 0; i--) {
        if ((1 << i) > b - a + 1)
            continue;

        minimum = min(minimum, spt[i][a]);
        a += 1 << i;
    }
    return minimum;
}

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

    int q;
    cin >> n >> q;

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

    init_spt();

    while (q--) {
        int a, b;
        cin >> a >> b;
        cout << query(a, b) << '\n';
    }
}