Cod sursa(job #3145593)

Utilizator victor_gabrielVictor Tene victor_gabriel Data 16 august 2023 13:07:56
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.81 kb
#include <fstream>

using namespace std;

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

const int DIM = 100010;
const int LOG_DIM = 18;

int n, m, x, y;
int r[LOG_DIM][DIM], e[DIM];

int main() {
    fin >> n >> m;
    for (int i = 1; i <= n; i++)
        fin >> r[0][i];

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

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

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

        int len = y - x + 1;
        int pow = e[len];
        int minn = min(r[pow][x], r[pow][y - (1 << pow) + 1]);

        fout << minn << '\n';
    }

    return 0;
}