Cod sursa(job #2989159)

Utilizator Edyci123Bicu Codrut Eduard Edyci123 Data 6 martie 2023 08:11:09
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.68 kb
#include <fstream>

#define DIM 100005
#define LGMAX 20

using namespace std;

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

int n, q;
int lg[DIM], dp[LGMAX][DIM];

int main() {

    f >> n >> q;

    for (int i = 1; i <= n; i++) {
        f >> dp[0][i];
    }

    lg[1] = 0;
    for (int i = 2; i <= n; i++) {
        lg[i] = lg[i / 2] +  1;
    }

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

    while (q--) {
        int x, y;
        f >> x >> y;
        int log = lg[y - x];
        g << min(dp[log][x], dp[log][y - (1 << log) + 1]) << "\n";
    }

    return 0;
}