ST表的功能很简单 它是解决RMQ问题(区间最值问题)的一种强有力的工具 它可以做到O(nlogn)预处理,O(1)查询最值 ST表是利用的是倍增的思想 拿最大值来说 我们用Max[i][j]表示,从i位置开始的2j个数中的最大值,例如Max[i][1]表示的是ii位置和i+1位置中两个数的最大值 ...
分类:
其他好文 时间:
2020-12-14 13:48:47
阅读次数:
3
2020-04-25 22:57:32 439. 线段树的构造 II 线段树是一棵二叉树,他的每个节点包含了两个额外的属性start和end用于表示该节点所代表的区间。start和end都是整数,并按照如下的方式赋值: 根节点的 start 和 end 由 build 方法所给出。 对于节点 A 的 ...
分类:
其他好文 时间:
2020-04-25 23:53:43
阅读次数:
116
ST算法能在O(NlogN)时间内对数列a预处理, 以O(1)的时间复杂度在线回答”数列a中下标在l~r之间的数的最大(小)值是多少“预处理:1)f[i][j]表示数列a中下标在子区间[i,i+2^j-1]里的数的最大(小)值, 即i开始的2^j个数的最大(小)值2)f[i][j]=max(f[i] ...
分类:
编程语言 时间:
2020-01-23 21:16:13
阅读次数:
130
ST算法能在O(NlogN)时间内对数列a预处理,以O(1)的时间复杂度在线回答“数列a中下标在l~r之间的数的最大(小)值是多少预处理:f[i][j]表示数列a中下标在子区间[i,i+2^j-1]里的数的最大(小)值,即i开始的2^j个数的最大(小)值f[i][j]=max(f[i][j-1],f ...
分类:
编程语言 时间:
2020-01-23 19:48:21
阅读次数:
81
今天学弟在群里直播讲课,讲了RMQ,以前摸鱼太多这个题目并没看出来是啥,然后就去凑了个热闹。 RMQ (Range Minimum/Maximum Query)问题是指:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n),返回数列A中下标在i,j里的最小(大)值,也就是说,RMQ ...
分类:
其他好文 时间:
2020-01-14 10:15:01
阅读次数:
100
Tarjan的SparseTable,即ST表,用于求RMQ区间最值问题。 我对ST表的时间复杂度是有所疑惑的,我认为查询并不能够达到O(1)的速度。也许只是常数?但是查询区间长度为n的时候就要对长度进行logn次调整,蓝书上写的是这样,我不太确定。 本质上,由于寻求区间最值的特性,在给定区间内多次 ...
分类:
编程语言 时间:
2019-11-10 15:18:22
阅读次数:
72
[TOC] 一、ST算法 ST算法(Sparse Table Algorithm)是用于解决RMQ问题(区间最值问题,即Range Maximum/Minimum Question)的一种著名算法。 ST算法能在复杂度为$O(NlogN)$的预处理后,以$O(1)$的复杂度在线处理序列区间内的最大值 ...
分类:
编程语言 时间:
2019-11-03 12:41:51
阅读次数:
91
https://loj.ac/problem/10119 题目描述 给出一个序列,有$M$个询问,每次输出区间$[l,r]$中的最大值 思路 简单的区间最值问题,不涉及修改操作,属于静态区间,显然可以用ST表维护。设$a$为原序列,那么维护的数组$f[ ...
分类:
其他好文 时间:
2019-10-29 19:38:00
阅读次数:
112
ST算法是求解RMQ问题的好方法,可以在0(NlogN)的预处理后实现O(1)的查询。该算法是在倍增的思想基础上实现的,比较基础,理解起来也不难。 补充几个要点: RMQ问题:即区间最值问题,给出一个序列a,要求求出区间[l,r]内的最大值。 倍增:(来自lyd的蓝书) log2(x)函数:返回$l ...
分类:
编程语言 时间:
2019-08-20 14:05:03
阅读次数:
92
RMQ算法全称为(Range Minimum/Maximum Query)【区间最值】 主要是这两种算法解决区间最值问题:线段树和稀疏表(Sparse Table) ST算法是解决RMQ(区间最值)问题,它能在O(nlogn)的时间预处理,然后O(1)回答。 其原理是倍增,f[i][j]表示从i位起 ...
分类:
其他好文 时间:
2019-08-09 17:36:42
阅读次数:
100