Cod sursa(job #2144733)

Utilizator rares96cheseliRares Cheseli rares96cheseli Data 26 februarie 2018 21:37:10
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.68 kb
#include <bits/stdc++.h>

#define NMAX 100005

using namespace std;

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

int N, M, rmq[20][NMAX], _log[NMAX], st, dr;

int main() {
    f >> N >> M >> rmq[0][1];
    for (int i = 2; i <= N; ++i) {
        f >> rmq[0][i];
        _log[i] = _log[i / 2] + 1;
    }

    for (int i = 1; (1 << i) <= N; ++i) {
        for (int j = 1; j <= N - (1 << i) + 1; ++j) {
            rmq[i][j] = min(rmq[i - 1][j], rmq[i - 1][j + (1 << (i - 1))]);
        }
    }

    while (M--) {
        f >> st >> dr;
        int aux = _log[dr - st + 1];
        g << min(rmq[aux][st], rmq[aux][dr - (1 << aux) + 1]) << '\n';
    }
    return 0;
}