省选模拟赛 3.4

A

注意到 \(a[i]\) 可以异或上任意多次 \(a[1 \to i - 1]\),于是 求出 \(1\to i - 1\) 的线性基 \(V\),能变成数的个数是 \(2^{|V|}\)

评测记录

B

等价转换题,就是 \(mex = k\),意味着所有权值为 \(k\) 的覆盖了这条边。从小到大枚举权值,那么求出 \(val = k\) 的路径的交集,对交集的边进行一个答案的更新。

更新使用线性并查集,复杂度可以做到线性。

细节

  • 求路径交集:取两两 LCA 中深度最小两个点。(路径的交还是路径) 当 \(p1 = p2\),有可能不存在交集,但是本题中不用讨论,因为这意味着边不交。
  • 每个边覆盖一次,快速查找需要修改的边:维护一个并查集,每次修改一条边作用在儿子节点上,每次并查集合并儿子节点,于是每次只会修改一个连通块中深度最小的点,然后一直跳父亲直到深度 >= LCA 的深度。均摊线性复杂度。

评测记录

C

\(a\) 序列分块,对于每个块统计他对原序列的贡献。散块暴力。

\(d_i\) 表示块中第 \(i\) 个数是啥,维护标记 \(c_i\) 表示 \(b\) 序列 \(i\) 位置开始平移过来了这个块。

那么 \(b_{i + j} = \sum c_i \cdot d_j\),使用 NTT 优化。

块长为 \(B\),则复杂度为 \(\mathcal{O}((n \log n + m) \dfrac{n}{B} + B\times m) = \mathcal{O(\sqrt {nm(n\log n +m))}}\)

posted @ 2023-03-06 12:49  Lates  阅读(37)  评论(3编辑  收藏  举报