RMQ问题【模板】

a 夏天 提交于 2019-11-27 00:19:45

概念

RMQ 是英文 Range Maximum/Minimum Query 的缩写,表示区间最大(最小)值。

解决 RMQ 问题的主要方法有两种,分别是 ST 表和线段树。本文主要讲 ST 表。

ST表

$ST$ 表,即 $Sparse-Table$ 算法,它预处理的时间是 $O(nlogn)$,但是查询时间只需要 $O(1)$,且常数非常小。但是不支持修改操作。最重要的是,这个算法非常好写,并且不容易出错。

$ST$ 表是基于倍增思想,令 $d(i, j)$ 表示从 $i$ 开始的,长度为 $2^j$的一段元素中的最小值,则可以用推递的方式计算 $d(i, j)$:$d(i, j) = max\{d(i,j-1), d(i + 2^{j-1}, j-1) \}$,$f[i][0] = a[i]$,即把待查询区间平均分成了两部分。

注意 $2^j \leq  n$,因此 $d$ 数组中的元素个数不超过 $n log n$,而每一项都可以在常数时间内计算完成,故总时间为 $O(n log n)$。

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!