题目
朴素算法
在线。
树链剖分套一个堆。
时间复杂度(O(n (log n)^3))。
分治
朴素算法中,套一个堆是为了支持删除操作。
采用以下分治可以避免删除操作:
每次对时间([l,r])分治,先取一个中点(m=(l+r) / 2),对于一个请求(不妨设其作用范围为([p,q]))而言,
如果它跨越了(m),就是说(p<m)且(q > m),那么我们在该层计算它对询问的贡献,并且它不进入下一层。
所以可以去掉一个堆,时间复杂度(O(n (log n)^2))。
整体二分
不需要树链剖分了,只需要支持链加以及子树求和,这个用欧拉序加树状数组维护。
时间复杂度(O(n (log n)^2))。