线段树杂题
想回家颓废...
炸弹
一个错误解法是认为答案是后缀的和然后势能线段树,但是答案并不是后缀和。
你注意到可以建出一张图后缩点。但是边数是 \(n^2\) 的。发现一个点能影响到的点是连续的,线段树优化建图即可。
向量
很妙的题。传统比较法。发现可以像斜率优化那样维护。(维护一个凸壳,这个我是观察性质与式子得到的,不知道有没有什么普遍性的解法,以后再来补)
然后线段树分治即可。注意这题的线段树分治是将询问点传上去。(好像不能是将修改点(本题是系数组)传上去?)
6。
可以这样说。这道题我想过的知识点基本上都可以得到一种能过本题的做法。但我却没想出来。有可能是因为今天没什么心情做题(非信竞都回家颓废了),但还有可能是我想到一个点觉得有一点不可做就跳了。这是不对的。并且以后还要再拓展一下知识的深度。
模型很像线段树分治。这个判断所有种类的集齐我想利用前一个状态动态转移过来。
感觉可以线段树分治+multiset维护?tmd,这查询怎么还有坐标啊。那就不能动态转移了。那就控制变量。同一个时刻,同一个商店状态,坐标的变动会有什么影响。也不好考虑啊?或许可以二分?是不是可以分段函数。
- 好久没做 sgt 忘了啊。发现可以转化为 区间数颜色 的模型。对于区间 \([l,r]\),\(\forall k>r,pre_{k}\geqslant l\),与这段区间所有颜色都出现了等价。但由于这段区间后面可能一个区间永远也不会出现,所以可以在末尾加一个哨兵颜色。所以可以线段树维护 \(pre\),再在线段树上二分。
修改可以大抵用 multiset 维护每个种类的坐标以维护 \(pre\),并且维护线段树每个叶子结点的最小值。大抵时间复杂度是 \(\mathcal {O}(n\log^2 n)\)。
大抵是 ds 学傻了,扫描线使我们做到 \(\mathcal {O}(n\log n)\)。这告诉我们部分线段树分治的题其实扫描线就可以了。
事实上,这个题自带的函数模型已经可以让我们想到李超树了。但是似乎需要线段树分治+可撤销李超树。可以做,但是 2 log,而且我想口胡。
ROT-Tree Rotations
注意到较小集合的逆序对不影响大集合的逆序对。sgt 合并做了。
值得学习的是可以一边合并一边统计逆序对,有点像 cdq 那样二分的时候统计,反正二分都很玄妙啦~
Escape Through Leaf
发现从子树内一个点转移过来的 \(\mathrm {dp}\) 式为 \(dp_i=\min\{dp_j+a_jb_i\}\)。发现这就是一个一次函数。莽上李超树即可。如果你启发式合并还是要 \(\mathcal {O}(n\log^2n)\)。
但是 众所周知 这种题一般有比启发式合并更优秀的复杂度。所以就是李超树合并了。复杂度证明类似 sgt 合并:
- 如果两个点中有一个为空,一定与两个都不为空同阶
- 两个点不为空,一定有一个点深度加 \(1\)。所有点可以下降的总深度为 \(n\log n\)。那么总时间复杂度为 \(\mathcal {O}(n\log n)\)。
但是本题看标签之前没有想出来李超树这个东西,还是没有做到现学现用。
注意李超树的 \(tree[0].val\)。