Cod sursa(job #2898187)

Utilizator Razvan_GabrielRazvan Gabriel Razvan_Gabriel Data 6 mai 2022 11:55:04
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.86 kb
#include <iostream>
#include <fstream>

using namespace std;

const int N = 1e5;
const int L = 16;

int r[L + 1][N + 1];
int log[N + 1];

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

    int n, q;
    fin >> n >> q;
    for (int j = 1; j <= n; j++) {
        fin >> r[0][j];
    }
    ///precalculam r[i][j]
    for (int i = 1; (1 << i) <= n; i++) {
        for (int j = (1 << i); j <= n; j++) {
            int p = (1 << (i - 1));
            r[i][j] = min(r[i-1][j-p], r[i-1][j]);
        }
    }
    ///precalculam log[j]
    log[1] = 0;
    for (int j = 2; j <= n; j++) {
        log[j] = 1 + log[j/2];
    }

    for(int k = 0; k < q; k++) {
        int st, dr;
        fin >> st >> dr;
        int l = log[dr - st + 1];
        fout << min(r[l][st + (1 << l) - 1], r[l][dr]) << "\n";
    }

    return 0;
}