【省选模拟】详细题解

3.25 黑白树

操作 \(4,5\) 可以用树剖 + 线段树 \(O(n\log^{2}n)\) 轻松维护,但这导致不能套用 QTree7 的做法(不过可以借鉴使用两个 DS 分别维护黑白点的套路)

称一个点的管辖点为该点连通块中最浅的点,可以使用树剖 + set 求出(注意跳轻边后特判),让同色连通块相关操作都基于管辖点进行。记 \(cnt\) 为一个点根链上异色点个数,那么某点处于连通块中等价于在管辖点子树且 \(cnt\) 相等。对于线段树上的区间,令其 \(cnt\) 等于该区间内点的 LCA 的 \(cnt\)(子树加维护 \(cnt\) 时求出的恰好就是这个)

对于连通块操作,先定位到管辖点子树的 \(\log\) 个区间,同色连通块中的点即为这些区间中 \(cnt=\) 管辖点 \(cnt\) 的点,因此对于每个线段树结点,需要维护的是区间中 \(cnt\) 等于区间 \(cnt\) 的点,体现在代码上就是根据父区间与子区间的 \(cnt\) 关系进行 pushup、pushdown(注意懒标记顺序)

代码有点小长,但不过是若干 trivial 操作的累加,并不难调

3.27 子段和

3.29 等待

3.31 矩阵

posted @ 2022-03-31 21:34  401rk8  阅读(76)  评论(2编辑  收藏  举报