RMQ
用倍增 快速求解区间最值 (GCD LCM 区间与或)
先预处理以每个点为起点的log个区间的最值
具体来说 f[i][j] 表示 [i, i + 2 ^ j]区间的最值
显然有转移 f[i][j] = max(f[i][j - 1], f[i + (1<<(j-1))][j-1]) 像区间dp一样先枚举长度j
对于查询[l, r]
考虑令k为满足 l+2^k <= r 的最大的一个k
k = log_2(r-l+1) 可以预处理出来每个长度的k f[i] = f[i>>1] + 1;
考虑这个k有什么性质? 发现 l + 2^(k+1) 必然 > r 所以[l, r]一定可以被两个长度为2^k的区间覆盖
[l, r] = max(f[l][k], f[r - 2^k + 1][k]

浙公网安备 33010602011771号