20250821
deque 题
你有一个初始为空的双端队列 \(a\),和一个初始为空的序列 \(b\)。
给定正整数 \(n, k\)。你需要进行 \(2n\) 次操作:
- 第 \(i (1 \le i \le n)\) 次操作:选择将 \(i\) 从队首或队尾加入双端队列 \(a\)。
- 第 \(n + i (1 \le i \le n)\) 次操作:选择将双端队列的队首或队尾弹出 \(x\),并追加到 \(b\) 的末尾,即令 \(b_i \leftarrow x\)。
问最终能得到多少种不同的 \(b\),满足 \(b_k = 1\)。
\(1 \le k \le n \le 10^6\),对质数取模。
观察发现,\(b_1, b_2, \dots, b_k\) 可以划分成两个下降子序列(可以为空),分别为 \(A\) 和 \(B\)。
若 \(k < n\),则选完 \(k\) 个以后,任意选择弹队首或队尾,需要乘上 \(2^{n - k - 1}\),因此只需要关心前 \(k\) 个。
从后往前考虑,能加入 \(A\) 时加入 \(A\),否则加入 \(B\)。则 \(1 \in A\)。
设 \(f(x, y)\) 表示 \(|A| + |B| = x\),且 \(\max A = y\) 时的方案数。根据上述定义,\(x \le y\)。初始 \(f(1, 1) = 1\),其他都为 \(0\)。
- 若 \(x < y\),选择未被选的最小值加入 \(B\)。转移到 \(f(x + 1, y)\)。
- \(\forall y < z \le n\),转移到 \(f(x + 1, z)\)。
令 \(g(x, y) = \sum_{i = x}^y f(x, i)\),则 \(g(x, y) = g(x - 1, y) + g(x, y - 1)\)。目标 \(g(k, n)\)。
考虑几何意义,从 \((1, 1)\) 出发,每次向右或向上走一步,目标 \((k, n)\),不能触碰 \(l: x = y - 1\)。
反射容斥,第一次触碰及之前对 \(l\) 作轴对称。\((1, 1)\) 过 \(l\) 的对称点为 \((2, 0)\),则 \(g(k, n) = \binom{n+k-2}{k-1}-\binom{n+k-2}{k-2}\)。
HDU 2025 2D
对于一个包含字符串 \(s_1, s_2, \cdots, s_k\) 的字符串可重集 \(T\),定义 \(T\) 的价值为
\[\sum\limits_{1 \le i < j \le k} \mathrm{LCP}(s_i, s_j) \]给出一个长度为 \(n\) 的字符串 \(S\),下标从 \(1\) 到 \(n\)。有一个初始为空的字符串集合 \(T\)。
有 \(q\) 次操作,每次给定 \(l, r (1 \le l \le r \le n)\),你需要将字符串 \(S[l : r]\) 的所有前缀都加入集合 \(T\)。
每次操作过后,你都需要求出此刻集合 \(T\) 的价值。答案对 \(10^9 + 7\) 取模。
\(1 \le n, q \le 10^5\)。
考虑化简 \(\sum_{i=1}^n \sum_{j=1}^m \min(i, j, p)\) 得到 \(nm\) 和 \(n+m\) 的系数以及常数项。
考虑后缀排序,求出 \(\texttt{height}\),建出笛卡尔树。或者后缀自动机求出 parent tree。
通过边上拆点的方式找到 \(S[l : r]\) 在树上对应位置,把 LCP 转化为树上对应节点的 LCA。
式子中有 LCA,且满足可减性,考虑利用 旧词 的 trick,维护当前节点减父亲的各项系数,树剖链加链求和。

浙公网安备 33010602011771号