线段树&&ST

一:

区间问题:什么时候用线段树,什么时候用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算法对这一项没有要求

posted @ 2020-02-07 12:56  swsyya  阅读(136)  评论(0编辑  收藏  举报

回到顶部