如下是会RE的
#include <iostream>
#include <cmath>
#include <cstdio>
#include <algorithm>
#include <cstring>
int N, M;
int max[100005][25];
int main() {
scanf("%d%d", &N, &M);
for (int i = 1; i <= N; ++ i)
scanf("%d", &max[i][0]);
for (int i = N; i >= 1; -- i) {
for (int j = 1; j <= N - (1 << (j - 1)); ++ j) {
max[i][j] = std::max(max[i][j - 1], max[i + (1 << (j - 1))][j - 1]);
}
}
for (int i = 1; i <= M; ++ i) {
int l, r;
scanf("%d%d", &l, &r);
// std::cout << l << " " << r << std::endl;
int log = std::floor(std::log2(double(r - l + 1)));
// std::cout << log << std::endl;
printf("%d\n", std::max(max[l][log], max[r - (1 << log) + 1][log]));
}
}
但是 max 开到 400005 就不会RE,为什么啊QAQ