Cod sursa(job #2876222)

Utilizator indianu_talpa_iuteTisca Catalin indianu_talpa_iute Data 23 martie 2022 10:02:05
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.81 kb
#include <bits/stdc++.h>
#define MAXN 100000
#define LOGMAXN 18

using namespace std;

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

int n, m, arr[MAXN + 1], rmq[LOGMAXN][MAXN + 1];
void generareRMQ() {
    for (int i = 1; i <= n; i++)
        rmq[0][i] = arr[i];
    for (int i = 1; (1 << i) <= n; i++)
        for (int j = 1; j + (1 << i) - 1 <= n; j++)
            rmq[i][j] = min(rmq[i - 1][j], rmq[i - 1][j + (1 << (i - 1))]);
}

void citire() {
    fin >> n >> m;
    for (int i = 1; i <= n; i++)
        fin >> arr[i];
    generareRMQ();
}

int rezolvare() {
    int i, j;
    fin >> i >> j;
    int sz = j - i + 1, lg = (int)log2(sz), sh = sz - (1 << lg);
    return min(rmq[lg][i], rmq[lg][i + sh]);
}

int main() {
    citire();
    for (int i = 0; i < m; i++)
        fout << rezolvare() << '\n';
    return 0;
}