4
前置知识:Binet Cauchy 公式:对于 \(m\times n\) 的矩阵 \(A\) 和 \(n\times m\) 的矩阵 B(\(n\ge m\)),有
对于这题的第一问:
对于第二问,构造 \(m\times n\) 的矩阵 \(B_{i,j}=[c_j=i]\),那么
https://www.luogu.com.cn/problem/P10698
最大流是边不交的限制,如果能把边不交变成点不交,就可以使用类似 Fiolki 的套路去做 lgv 了。
考虑把原图中的边抽象成点,并对原图中的每个点建 \(\min(deg_i,k)\) 个虚点,每个虚点向原图的出边连边,入边向虚点连边。于是就得到了一张点数 \(O(m)\),边数 \(O(mk)\) 的新图。
然后就是 Fiolki,给每条边随机赋个权,以 \(1\) 号点的所有虚点为起点跑 lgv,求矩阵的秩即可。
复杂度是 \(O(mk^2+nk^3)\),但是能过!
https://www.luogu.com.cn/problem/AT_abc311_h
宇宙题,因为 \(m\) 有 \(50000\) 所以不能背包合并,考虑单点插入。
先考虑怎么做单次。在 dfs 函数里传入一个长度为 \(m+1\) 的 vector \(f\),表示 dp 的初始数组,返回两个 vector,分别表示当前子树内选的最浅的点是 \(0/1\),在 \(f\) 的基础上更新后的结果。
发现在执行 dfs 时,有一个儿子只需要递归进去 dfs 一次,其它的儿子都要 dfs 两次。如果把一个点向它只递归一次的儿子连边,这恰好构成了树的一个链剖分,一个点 \(x\) 被执行 dfs 的次数就是 \(2^{x到根的虚边数量}\)。使用重链剖分,总的 dfs 次数显然不超过 \(O(n^2)\),可以分析到 \(O(n^{1.59})\),但我不会。于是我们会单次了。
实际上上面的做法并不完全是单次,它可以一次性求出一条重链上所有点的答案。对每一条重链都跑一遍上面的做法,复杂度是一个类似等比数列求和的东西,还是 \(O(n^{1.59}m)\)。
https://www.luogu.com.cn/problem/P6272
用线段树维护区间最大值,现在我们考虑怎么快速的给两个数比大小。
用平衡树维护大小关系。类似后缀平衡树那样,给每个点赋两个权值 \((l,r)\),然后就可以 \(O(1)\) 比大小了。
复杂度 \(O(m\log m)\)。
https://www.luogu.com.cn/problem/P2757
枚举 \(a_i\),check 是否存在 \(a_i-k\) 和 \(a_i+k\) 在序列的位置分别在 \(a_i\) 的左右两侧。在枚举的过程中维护 \(p_x\) 表示 \(x\) 是否在 \(a_i\) 的左边,那么有解等价于 \(p_{1\dots a_i-1}\) 和 \(p_{a_i+1\dots n}\) 不是关于 \(a_i\) 对称的。线段树维护哈希即可。

浙公网安备 33010602011771号