1 月做题记录

1 离线动态图连通性

众所周知的做法是离线后对时间轴做线段树分治,需要使用可撤销并查集维护加边撤销,查询两点连通性,复杂度 \(O(n\log^2 n)\)

事实上我们可以做到 \(O(n \log n)\)。考虑线段树分治结构。在线段树上每个点有一个集合 \(S \subseteq E\),我们要维护一个图,递归进入这个结点时我们需要加入 \(S\) 内的所有边,离开时撤销,递归到叶子时需要支持一次查询两点连通性。

考虑不使用并查集维护之,递归到每个点加入边时,考虑子树内的所有边 \((u,v)\),包含修改边与查询边,我们只关心这些边的连通情况,即只关心这些边对应的连通块编号。递归到一个结点时,我们将这个点对应的边拉出来 DFS,然后考虑子树内的所有边,更新其所属连通块编号。这样复杂度是每个点子树内边数和,显然还是 \(O(n \log^2 n)\),但是显然每个子树内多条本质相同的边没有意义,故复杂度可以做到每个点子树内本质不同边数和,这样就是 \(O(n \log n)\) 的。

2 P5416

对每个点考虑其存活时间,是其子树除去其子树内若干小子树,小子树就是删除的部分。用 DFN 序区间刻画子树形态,这样对于所有点总共有 \(O(n)\) 段存活时间,线段树分治即可。

3 QOJ8363

我们的目标是对于每个 \(i<j\) 判定是否存在 \((i,j)\) 这条边。

将所有这样的 \((i,j)\) 按照 \(j-i\) 从小到大排序,对于长度 \(l\) 从小到大依次确定所有 \(j-i=l\) 的出现过的边。

对于固定的 \(l\),考虑分治,对于目前分治区间 \([l,r]\),我们的目标是找到所有 \(i \in [l,r]\)\((i,j)\) 对。考虑将所有 \(i \in [l,r]\)\((i,j)\) 对拼在一起,形如 \(i,i+l,i+2l,\cdots,i+kl,i+kl+1,i+(k-1)l+1,\cdots\),使得所有对都作为相邻的出现过,且其余的相邻位置都满足差小于 \(l\)。在前缀和后缀拼接一个相邻差为 \(1\) 的即可。这样总询问次数就是 \(O(n \log n)\) 的了。

4 LOJ4988

考虑 Boruvka,对于每个连通块找出向外最小出边,维护目前得到的可能成为答案的一组共享端点的边,每次加边都可以通过若干次 \(1\) 类询问得到新的边集,然后使用一次 \(2\) 类询问即可确定最小出边。这样的过程只会进行 \(n-1\) 次,故询问 \(2\) 的次数即为 \(n-1\) 次,询问 \(1\)\(O(m \log n)\) 的,但肉眼可见根本跑不满,可以通过。

5 神秘题

限制等价于每个 \(b\) 大于等于前缀 \(a\) 的最大值。这个限制相当不容易直接下手,尝试将路径分步维护。具体来说,对于一条路径,我们希望在所有 \(a\) 的前缀最大值处分段。按照 \(a\) 从大到小确定每个点的答案,那么对于目前的点 \(u\),其答案来源于所有 \(j\) 满足 \(a_j>a_u\) 的点 \(j\),且 \(u\)\(j\) 可以只经过 \(a_k \leq a_u,b_k \geq a_u\) 的点到达。对 \(a\) 从大到小扫描线,每个点 \(k\) 有一个存活区间。我们的操作可以形式化描述成每个点有存活状态和点权,支持单点修改点权与存活状态,查询一个点能到达的存活的点的点权最大值。

离线做线段树分治,维护可撤销并查集即可。线段树分治时先向右侧递归然后向左侧递归就可以解决修改点权的问题。

6 神秘题

考虑类似猫树分治,也就是递归处理横跨区间中点的答案。对于分治区间 \([L,R]\),中点为 \(mid\),对于询问区间 \([l,r]\) 满足 \(l \leq mid < r\),考虑在 \(r\) 第一次跳到 \(mid\) 左侧时统计这之前的答案,并将新的 \(l,r'\) 递归进入左区间求解。对于寻找 \(r'\),简单倍增处理即可。复杂度 \(O((n+q)\log^2 n)\)

7 P3527

直接整体二分是 \(O(n\log^2 n)\) 的。此外有两个学习价值较大的做法。

第一个做法是考虑对于第 \(i\) 次修改 \(l,r,a\),在 \(l\) 处添加 \((i,a)\),在 \(r+1\) 处添加 \((i,-a)\),然后从前往后用主席树维护之,查询时在主席树上一起二分,时空复杂度均为 \(O(n \log n)\)

另一种做法是你考虑整体二分时也用这个差分做法而不是在内部使用非线性数据结构,这也是可以做的,时间复杂度 \(O(n \log n)\),空间线性,写起来可能比较麻烦。

posted @ 2025-12-25 08:31  HappyBobb  阅读(8)  评论(0)    收藏  举报