Cod sursa(job #3158247)

Utilizator octavian202Caracioni Octavian Luca octavian202 Data 18 octombrie 2023 09:38:31
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.74 kb
#include <iostream>
#include <fstream>
#include <cmath>

using namespace std;

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

const int NMAX = 1e5 + 5;
int rmq[NMAX][20], n, q;

void generare() {
    for (int p = 1; p <= 17; p++) {
        for (int i = 1; i <= n - (1 << p) + 1; i++) {
            rmq[i][p] = min(rmq[i][p - 1], rmq[i + (1 << (p - 1))][p - 1]);
        }
    }
}

int main() {

    fin >> n >> q;
    for (int i = 1; i <= n; i++) {
        fin >> rmq[i][0];
    }
    generare();

    while (q--) {
        int x, y;
        fin >> x >> y;

        int l = y - x + 1, p = 0;
        while ((1 << (p + 1)) <= l)
            p++;

        int res = min(rmq[x][p], rmq[y - (1 << p) + 1][p]);
        fout << res << '\n';
    }

    return 0;
}