Cod sursa(job #2870495)

Utilizator DKMKDMatei Filibiu DKMKD Data 12 martie 2022 13:27:44
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.87 kb
#include <bits/stdc++.h>
#define N 705
#define MOD 1000000007

using namespace std;

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

int r[17][100010], n, m, E[100010], st, dr;
void citire() {

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

    for (int i = 1; (1 << i) <= n; ++i) {
        for (int j = 1; j <= n; ++j) {
            r[i][j] = r[i - 1][j];
            int x = j + (1 << (i - 1));
            if (x <= n && r[i][j] > r[i - 1][x])
                r[i][j] = r[i - 1][x];
        }
    }
    E[1] = 0;
    for (int i = 2; i <= n; ++i)
        E[i] = 1 + E[i / 2];
    for (int i = 1; i <= m; ++i) {
        fin >> st >> dr;
        int e = E[dr - st + 1], k = (1 << e);
        fout << min(r[e][st], r[e][dr - k + 1]) << "\n";
    }
}
int main() {

    citire();
    RMQ();
    return 0;
}