Cod sursa(job #1985427)

Utilizator rares96cheseliRares Cheseli rares96cheseli Data 27 mai 2017 21:20:42
Problema Range minimum query Scor 0
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;
}