Cod sursa(job #2773876)

Utilizator Stefan_BerlinschiStefan-Cristian Berlinschi Stefan_Berlinschi Data 9 septembrie 2021 07:57:16
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.87 kb
#include <iostream>
#include <fstream>

using namespace std;

// ifstream fin("intrare.txt");
// ofstream fout("iesire.txt");

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

int log2(int x) {
    return (x > 1) ? 1 + log2(x/2) : 0;
}

int main() {
    int n, m, x, y;
    fin >> n >> m;

    int p = log2(n);
    int RMQ[p+1][n] = {0};

    for (int i = 0; i < n; i ++) {
        fin >> RMQ[0][i];
    }

    int put = 1;
    for (int i = 1; i <= p; i++) {
        for (int j = 0; j < n; j++) {
            RMQ[i][j] = min(RMQ[i-1][j], RMQ[i-1][j+put]);
        }
        put *= 2;
    }

    for (int i = 0; i < m; i++) {
        fin >> x >> y;

        x--;
        y--;

        int l = y - x + 1;
        int row = log2(l);
        int pow = 1 << row;

        fout << min(RMQ[row][x], RMQ[row][y-pow+1]) << '\n';
    }

    return 0;

}