Cod sursa(job #3192805)

Utilizator vlad_binVlad Bintintan vlad_bin Data 13 ianuarie 2024 11:30:50
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;

const int NMAX = 1e5 + 5;

const int log_max = 18;

int rmq[log_max][NMAX];

int n, m;

ifstream in("rmq.in");
ofstream out("rmq.out");

int main() {
    in >> n >> m;
    for (int i = 0; i < n; i++)
        in >> rmq[0][i];
    int log = 1;
    int max = 0;
    while (log <= n) { log <<= 1; max++; }
    log >>= 1, max--;
    for (int i = 1; i <= max; i++) {
        for (int j = 0; j <= n - (1<<i); j++)
            rmq[i][j] = min(rmq[i-1][j], rmq[i-1][j + (1<<(i-1))]);
    }

    while (m--)
    {
        int a, b;
        in >> a >> b;
        a--;b--;
        int dist = b-a+1;
        log = 1;
        while ((1<<log) <= dist) log++;
        log--;
        int val = min(rmq[log][a], rmq[log][b-(1<<(log-1))]);
        out << val << '\n';
    }
}