Processing math: 0%

min-max 容斥

max

证明

设容斥系数为 f(|T|),则 \max(S) = \sum_{T \subseteq S} f(|T|) \min(T)

考虑整体第 k 小对最大值的贡献,显然当且仅当 k=n 时,最小值有贡献,因此有下式:

[ n = k ] =\sum_{i=0}^{n-k} { n-k \choose i } f(i+1)

组合意义为对于大于最小值 n-k 个数,可以任意选取。枚举选了 i 个数,再加上固定下来的第 k 小,共 i+1 个数,因此乘上容斥系数 f(i+1)

变换一下,可得 [ n = 0 ] =\sum_{i=0}^{n} { n \choose i } f(i+1)

套用二项式反演,可知 f(n+1)=\sum_{i=0}^n (-1)^{n-i} { n \choose i } [ i = 0 ]

因此 f(n+1)=(-1)^n,即 f(n)=(-1)^{n-1}

阅读全文 »

题意

给定一棵带边权 { 0, 1} 的无根树,求回文路径的个数。

其中 3 \le n \le 5\times 10^4

分析

点分治,问题转化为求有多少条过当前重心的路径,使得其构成回文串。

将从重心开始的所有结点对应的串,插入 Trie 树中,最坏情况下 Trie 树与原树同构。

分析跨越重心 root 路径的回文串结构,记两个端点分别为 u,v,其中 u 的深度大于等于 v 的深度。

深度相同,则 rootu 路径对应串 (简记为 u 串) 必须等于 rootv 路径对应串 (简记为 v 串)。令枚举的每个结点的出现次数为 cnt,这部分答案贡献为 cnt \choose 2

深度不同,则 v 串等于 u 串的后缀,且 u 串的前缀是一个回文串。

因此,我们考虑对 Trie 树构建 AC 自动机,则 u 串的所有在 Trie 树中有对应结点的后缀就是 fail 树上的所有祖先。注意到,fail 树上的祖先可能很多,无法枚举并检查当前前缀是否为回文串。但是,根据 Border 理论,一个串的回文后缀(前缀)可以表示为 \log n 段等差数列。于是,我们处理所有 Trie 树结点的等差数列 (l,r,d),对应表示首项、末项和公差。这可以在构建完 Trie 树后,dfs Trie 树,并维护正串和反串的哈希值得到。

最后,枚举所有 Trie 树结点,令其深度为 len,再枚举其等差数列,只需要询问 fail 树的祖先上长度为等差数列 (len-r,len-l,d) 的出现次数和,进一步转化可以变成求所有长度 l \equiv ((len-l) \bmod d) ( \bmod d) 的点值和,考虑根号分块容易维护,但是可能会取到一些等差数列值域外的点,可以将询问离线的最大长度上,并拆成两个前缀和,在 dfs fail 树的栈上二分即可获得对应结点。

总结

  1. 点分治。

  2. 插入从重心开始的 Trie 树。

  3. dfs Trie 树,求出每个点回文前缀的等差数列。

  4. dfs fail 树,维护栈上的结点,维护栈上支持快速查询模 br 处点值的分块数据结构。枚举等差数列,对于公差小的,栈上二分找到询问离线点,对于公差大的,暴力枚举。

  5. 枚举 Trie 树结点,计算回文前缀为空和不为空的匹配方案数。

  6. 点分治容斥掉来自同一子树的配对答案数。

时间复杂度:T(n)=2T({n \over 2})+O(n \sqrt{n}+n\log^2 n)T(n)=O(n \sqrt{n})

阅读全文 »

E Marbles

给定一个序列,每次交换两个相邻位置,求使得数组中所有相同颜色都是连续段的最少操作次数。

颜色种数只有 20,注意到数组最后形态会有 20! 种。

可以从左到右确定,记 dp(mask) 表示左边已经确定了集合 mask 的最小操作数。

转移时,枚举一个没有固定颜色,将其接在后面,因为前面的操作不会改变其他颜色的相对关系,因此操作次数等价于该颜色和其他未出现在集合的颜色的逆序对数。

阅读全文 »

题意

给定一棵树,边权带修,强制在线,询问直径。

其中 3 \le n, q \le 10^5

分析

首先,给出一个引理:树上的两个点集 A,B,点集 A 的某一条直径端点 a_1,a_2,点集 B 的某一条直径端点 b_1,b_2,则两个点集之间的直径一定是这 4 个点中最长的距离。反证法,容易证明。

树状数组和 LCA 解决带修路径长度。线段树维护区间的直径和直径端点。

对于修改操作,先修改边权,然后线段树上重构可能跨过这条边的线段树区间直径。

记修改边的深度大的结点为 u,注意到 u 的 dfs 序区间内的直径一定不变,以及外部的区间一定不变,这个过程等价于在线段树上 dfs 了 u 的 dfs 序区间,重构一下经过的所有结点。

时间复杂度 O(n\log n + q \log ^2 n)

阅读全文 »

回到梦(题解)开始的地方?

A XORinacci

B Uniqueness

C Magic Grid

[0,n^2-1] 填一个 n \times n 的矩阵,使得每行每列异或和相同,其中 n4 的倍数。

不知道为啥,反正观察出四个填一个 2 \times 2 就行了。

D Restore Permutation

有一个排列 p,现在你知道对于位置 i,排列上前 i-1 个数小于 p_i 的和为 s_i,要求恢复出 p_i

从后往前,在树状数组上二分即可。

E Let Them Slide

最大长度为 w,给定 n 个滑动窗口,每个窗口有 l_i 个数,回答 w 个独立询问,所有窗口任意滑动,第 i 列的最大权值和。

差分答案。

枚举每一行,枚举整个值域范围,对于位置 i,他可能是从窗口中某一个范围转移过来,注意到,如果窗口很短,那么中间会有很多位置只由窗口最大值贡献而来,那么我们实际上只需要枚举值域范围某个前缀和后缀,中间一部分可以在差分数组上打标记。如果窗口很长,即长度大于 w \over 2,那么这样的窗口最多出现 2 个,因此总复杂度为 O(\sum l_i)

阅读全文 »