<Problem>
https://judge.yosupo.jp/problem/staticrmq
#include <iostream>
#include <cmath>
using namespace std;
int main() {
int n, q;
cin >> n >> q;
int* arr = new int[n + 1]{ 0 };
for (int i = 1; i <= n; i++) {
cin >> arr[i];
}
int st_size = (log(n) / log(2)) + 1;
int** st = new int* [st_size];
for (int i = 0; i < st_size; i++) {
st[i] = new int[n + 1]{ 0 };
}
for (int i = 1; i <= n; i++) st[0][i] = arr[i];
int lg = log(n) / log(2);
for (int j = 1; j <= lg; j++) {
for (int i = 1; i <= n - (1 << j) + 1; i++) {
st[j][i] = min(st[j - 1][i], st[j - 1][i + (1 << (j - 1))]);
}
}
while (q--) {
int l, r;
cin >> l >> r;
l = l + 1;
r = r;
int len = (r - l + 1);
int k = log(len) / log(2);
int res = min(st[k][l], st[k][r - (1 << k) + 1]);
cout << res << endl;
}
return 0;
}