前言
其实我觉得你看猫锟的解释也看不懂(主要是还有一些不良心的讲解者不讲清楚,当然这里不是针对了qwq)
Solution
考虑我们的线段树是个啥玩意?
每一层都是一堆区间叠在一起。
我们在每一个节点维护的又是什么?
左边的max,右边的max,中间的max,还有sum。
那么我们改变一下:
令
\(p_{dps,i}\)表示在深度为
\(dps\)的线段树上
\(i\)这个节点所在区间的左边的max,右边的max,然后就可以在
\(build\)的时候求
再令\(p_{dps,i}\)表示在深度为\(dps\)的线段树上\(i\)这个节点所在区间的到中间的\(max\),然后也可以在\(build\)的时候求。
然后就可以\(\Theta(1)\)的询问就好了。
#include #include #include #include #include #include #include #include