ARC++ 230

难度排序 \(D\to A\to B\to C\)(?


A

考虑枚举每一条边被经过几次,易得:

\[\sum_{i=0}^x\sum_{j=0}^{n-x}\binom xi\binom{n-x}j\min(i,j) \]

其中 \(x\) 是子树大小。因为 \(\min(i,j)=\frac12(i+j-|i-j|)\)。

我们有

\[\begin{align*} A&=\sum_{i=0}^x\sum_{j=0}^{n-x}\binom xi\binom{n-x}j i \\&=x\sum_{i=0}^{x-1}\sum_{j=0}^{n-x}\binom{x-1}{i}\binom{n-x}j \\&=x2^{n-1} \end{align*}\]

同理有 \(B=(n-x)2^{n-1}\)。

不妨做换元 \(u=n-x,k=u+j\),然后应用范德蒙德恒等式:

\[\begin{align*} C&=\sum_{i=0}^x\sum_{j=0}^{n-x}\binom xi\binom{n-x}j|i-j| \\&=\sum_{i=0}^x\sum_{j=0}^{n-x}\binom xu\binom{n-x}j|x-u-j| \\&=\sum_{k=0}^n\binom nk|x-k| \end{align*}\]

对于后半段,进一步展开绝对值并区间再现,并记:

\[P(t)=\sum_{k=0}^t\binom nk,Q(t)=\sum_{k=0}^tk\binom nk \]

有:

\[\begin{align*} C&=\sum_{k=0}^n\binom nk|x-k| \\&=\sum_{k=0}^x\binom nk(x-k)+\sum_{k=x+1}^n\binom nk(k-x) \\&=\sum_{k=0}^xx\binom nk-k\binom nk+\sum_{k=x+1}^nk\binom nk -x\binom nk \\&=xP(x)-Q(x)+\left(\sum_{k=0}^nk\binom nk -x\binom nk\right)-Q(x)+xP(x) \\&=2xP(x)-2Q(x)+\left(\sum_{k=0}^nk\binom nk-\sum_{k=0}^nx\binom nk\right) \\&=2xP(x)-2Q(x)+n2^{n-1}-x2^n \end{align*}\]

预处理 \(P,Q\) 取值即可 \(O(1)\) 求和。


B

正向维护比较困难,不妨逆向维护,考虑在一定操作下,什么样的 \(A\) 可以最终变成 \(B\)。

可以归纳证明,合法的 \(a\) 永远位于一个区间 \([l,r]\) 中。

具体地,初始时只有 \(a=b\) 合法,即 \([b,b]\)。

可以验证,对于一个区间 \([l,r]\),若对 \(x\) 应用 chmax 操作:

  • 若 \(x>r\),则不存在合法值,区间为空。
  • 若 \(x<l\),则区间保持不变。
  • 若 \(x\in[l,r]\),区间变为 \((-\infty,r]\)。

同理可以写出关于 chmin 的对应操作。

由此可以发现,当区间初始值为 \([b,b]\) 时,整个过程中只有 \(4\) 种可能的取值:

  • \([b,b],(-\infty,b],[b,\infty),(-\infty,\infty)\).

不妨记 \(u_i,v_i\) 分别表示上/下界有没有被扩展。

一个有效的操作总是至少将一个 \(u/v\) 从 \(0\) 变为 \(1\),且此后不会再变回 \(0\)。

由此可证至多只存在 \(2N\) 次有效操作。

不难做到 \(\mathcal O(n^2)\) 找到一个有效操作。

找到所有的有效操作后按 \(u_i,v_i\) 判定 \(a\) 是否合法即可。

由操作上界保证复杂度 \(\mathcal O(n^3)\)。


C

假如我们已知序列 \(H\),不妨取其笛卡尔树。

可以证明的是,下标相邻的数在笛卡尔树上必为 祖先-后代 关系。否则取其 LCA,下标在两者之间,与相邻矛盾。

设点 \(u\) 在笛卡尔树上的深度是 \(d_u\),则易得 \(C_i=\max(d_i,d_i+1)\)。

考虑每次删去一个深度最深的叶子,即设序列最大值 \(m\),找到 \(m,m\) 第一次出现的位置,并将其替换为 \(m-1\),过程中维护其子树大小,即可重构出笛卡尔树。

计数 \(H\) 相当于求笛卡尔树拓扑序数,设 \(u\) 子树大小为 \(s_u\) 有经典结论答案为:

\[\frac{n!}{\prod s_u} \]

另外一点是,上述算法实际上要求 \(C_0\) 和 \(C_n\) 的值已知。但实际上未知。

只需注意到,逆序观察上述过程,相当于从 \([0]\) 开始,每次将 \(c\) 替换为 \(c+1,c+1\),由此可得

\[\sum 2^{-c}=1 \]

总成立,那么 \((C_0,C_n)\) 只有最多两种情况,分别计算即可。


D

考虑记题中等式两边 \(=k\)。

记 \(X,k,Y\) 分别表示矩阵中 \(<k\),\(=k\),\(>k\) 的数。

题意即至少有一列不含有任何 \(X\),至少有一行不含有任何 \(Y\)。

记 \(X\) 贡献 \(x\),\(Y\) 贡献 \(y\),\(E\) 贡献 \(1\)。

直接容斥得生成函数:

\[\sum_{i=0}^A\sum_{j=0}^B(-1)^{i+j}\binom Ai\binom Bj(1+x)^{i(B-j)}(1+y)^{j(A-i)}(1+x+y)^{(A-i)(B-j)} \]

不妨枚举 \(k\) 并代入 \(x=k-1,y=M-k\)。

\[\sum_{k=1}^M\sum_{i=0}^A\sum_{j=0}^B(-1)^{i+j}\binom Ai\binom Bjk^{i(B-j)}(M-k+1)^{j(A-i)}M^{(A-i)(B-j)} \]

欲快速求这个式子的值,不妨反向应用二项式定理:

\[\begin{align*}f(k)=&\sum_{i=0}^A\sum_{j=0}^B(-1)^{i+j}\binom Ai\binom Bjk^{i(B-j)}(M-k+1)^{j(A-i)}M^{(A-i)(B-j)} \\=&\sum_{i=0}^A(-1)^i\binom Ai\sum_{j=0}^B\binom Bj\left((k-M-1)^{A-i}\right)^j\left(k^iM^{A-i}\right)^{B-j} \\=&\sum_{i=0}^A(-1)^i\binom Ai\left((k-M-1)^{A-i}+k^iM^{A-i}\right)^B \end{align*} \]

由此即可在 \(\mathcal O(A\log*)\) 的复杂度内求出单项 \(f(k)\)。

再次注意到 \(f(k)\) 作为关于 \(k\) 的多项式项数不超过 \(AB\),则取其前缀和 \(F(k)\) 项数同样是 \(\mathcal O(AB)\) 的。那么暴力求出足够多项后拉插即可快速求 \(F(M)\)。

时间复杂度 \(\mathcal O(A^2B\log*)\)。

posted @ 2026-09-27 08:32  CuteNess  阅读(13)  评论(0)    收藏  举报