如果你用的是 st 表,由于在查 [Li−1,i−1] 最小值的时候左边界可能为 0,所以预处理时应该把 f0,j 也处理进去。
for (int j = 1; (1 << j) <= n; j++)
for (int i = 0; i + (1 << j) - 1 <= n; i++) {
f1[i][j] = max(f1[i][j - 1], f1[i + (1 << j - 1)][j - 1]);
f2[i][j] = min(f2[i][j - 1], f2[i + (1 << j - 1)][j - 1]);
}