标签:问题 重叠 span 分治 时间 问题: 并集 举例 核心
一:
区间问题:什么时候用线段树,什么时候用ST
如果需要动态维护,需要添加或者删除,那么就必须用到线段树,线段树的单次查询时间为O(logn),如果查询量大还是很浪费时间。
在不需要动态维护的时候,ST算法的查询速度可以到达O(1)
二:
【什么样的问题适合ST算法】
例如,RMQ问题和RGQ问题适合ST算法,那么这两个问题有什么特性呢,以RMQ问题举例。
求{2, 3, 1, 5, 4}的最小值,可以通过求出a = min{2, 3, 1, 5}, b = min{3, 1, 5, 4}, ans = min{a, b}求出。
可以看到,求一个大区间的最小值,可以通过求两个小区间的最小值来求得,前提是这两个小区间的并集是这个大区间,至于有没有交集,对结果没有影响。所以求{2, 3, 1, 5, 4}的和,就不能这么做了。
因此,如果一个大区间问题可以由两个小区间(这两个小区间的并集是这个大区间)得到,这两个小区间是否有重叠对大区间的结果没有任何影响。那么这类问题就可以用STST算法来做。这和分治算法有点像,但是核心要求完全不一样,分治算法的子问题不能有重叠。而ST算法对这一项没有要求
标签:问题 重叠 span 分治 时间 问题: 并集 举例 核心
原文地址:https://www.cnblogs.com/wsy107316/p/12272667.html