线段树&&ST
Posted wsy107316
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线段树&&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算法对这一项没有要求
以上是关于线段树&&ST的主要内容,如果未能解决你的问题,请参考以下文章
bzoj2006 [ NOI2010 ] && bzoj3784 --点分治+线段树+堆