Pagini recente » Cod sursa (job #234161) | Cod sursa (job #2903292) | Cod sursa (job #625785) | Cod sursa (job #2478908) | Cod sursa (job #3142818)
// https://infoarena.ro/problema/rmq
#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int main() {
int n, m;
fin>>n>>m;
vector<int> a(n+1);
for (int i=1; i<=n; ++i) fin>>a[i];
vector<vector<int>> rmq(18, vector<int>(n+1));
for (int i=1; i<=n; ++i) rmq[0][i] = a[i];
for (int h=1; h<18; ++h) {
for (int i=1; i<=n; ++i) {
rmq[h][i] = rmq[h-1][i];
if (i + (1<<h) - 1 <= n) rmq[h][i] = min(rmq[h][i], rmq[h-1][i+(1<<(h-1))]);
}
}
auto query_rmq = [&](int l, int r) {
int lg = log2(r-l+1);
return min(rmq[lg][l], rmq[lg][r-(1<<lg)+1]);
};
for (int i=0; i<m; ++i) {
int l, r;
fin>>l>>r;
fout<<query_rmq(l, r)<<endl;
}
}