Cod sursa(job #2615189)

Utilizator MocalinnoMoca Andrei Catalin Mocalinno Data 13 mai 2020 20:02:36
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.77 kb
#include <bits/stdc++.h>
#define DAU  ios_base::sync_with_stdio(false); fin.tie(0); fout.tie(0);
#define PLEC fin.close(); fout.close(); return 0;
using namespace std;
const string problem("rmq");
ifstream fin(problem + ".in");
ofstream fout(problem + ".out");
int rmq[20][100005], n, q, x, y, dif, k;
int main() {
    DAU
    fin >> n >> q;
    for (int i = 1; i <= n; ++i)
        fin >> rmq[0][i];
    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 (q--) {
        fin >> x >> y;
        dif = y - x + 1;
        k = static_cast<int>(log2(dif));
        fout << min(rmq[k][x], rmq[k][x + dif - (1 << k)]) << '\n';
    }
    PLEC
}