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\) 的系数以及常数项。

\[\sum_{i=1}^n \sum_{j=1}^m \min(i, j, p) = \frac 16 p(p-1)(2p-1) - \frac 12 p(p-1)(n + m) + pnm \]

考虑后缀排序,求出 \(\texttt{height}\),建出笛卡尔树。或者后缀自动机求出 parent tree。

通过边上拆点的方式找到 \(S[l : r]\) 在树上对应位置,把 LCP 转化为树上对应节点的 LCA。

式子中有 LCA,且满足可减性,考虑利用 旧词 的 trick,维护当前节点减父亲的各项系数,树剖链加链求和。

posted @ 2025-08-21 20:32  SZwinsun  阅读(2)  评论(0)    收藏  举报