题目背景
给定一个长度为N的数组a,并做M次区间查询,询问区间[L, R]的最大值,并且a[i](1 <= i <= N)的值在此过程中不会发生改变,使用倍增的方法可以提供 O(NlogN) 的预处理时间复杂度、O(1) 的查询时间复杂度。
核心思路
用 f[i][j]表示在区间[i, i + 2 j ^{j} j - 1]的最大值,则:
f[i][j] = max(f[i][j - 1], f[i + (1 << j - 1)][j - 1])
事实上f[i][j - 1]表示的是区间 [i, i + 2 j − 1 {^{j - 1}} j−1 - 1] 的最大值,f[i + (1 << j - 1)][j - 1] 表示的是区间 [i + 2 j − 1 ^{j - 1} j−1, i + 2 j ^j

最低0.47元/天 解锁文章
2503

被折叠的 条评论
为什么被折叠?



