先考虑第一问的答案是什么。考虑对于一个长为 nn 的排列,我们对于每个位置 ii 求出 fif_i 表示以 ii 结尾的 LIS 长度,gig_i 为以 ii 开头的 LDS 长度。那么我们可以定义一个二元组序列 aa,其中 ai=(fi,gi)a_i = (f_i, g_i)

显然 aa 序列中的元素互不相同,假设有一对 (i,j)(i, j) 满足 1i<jn1 \le i < j \le n,那么 pi>pjp_i > p_j 能推出 gi>gjg_i > g_j,否则能推出 fi<fjf_i < f_j。并且根据题目限制,显然有二元组 (x,y)(x, y) 合法当且仅当 xA,yB,x+y1Cx \le A, y \le B, x + y - 1 \le Caa 序列中所有元素都应当合法。

那么我们得到了一个 nn 的上界 AB(A+BC2)AB - \binom{A + B - C}2,我们不妨猜测 nn 一定能取到它。后面的过程中将会证明这一点。

考虑任意一个合法二元组 (x,y)(x, y),如果有 x>1x > 1,那么 (x1,y)(x - 1, y)aa 中的位置 ii 一定在 (x,y)(x, y)aa 中的位置 jj 之前,且满足 pi<pjp_i < p_j

  • i>ji > j,则根据 fi<fjf_i < f_j 推出 fjf_j 不能转移到 fif_i,也就是 pj>pip_j > p_i,这样 gig_i 就能转移到 gjg_j,与 gi=gjg_i = g_j 这一条件矛盾。
  • 那么有 i<ji < j,则根据 gi=gjg_i = g_j 推出 gjg_j 不能转移到 gig_i,所以 pi<pjp_i < p_j

同理,如果有 y>1y > 1,那么 (x,y1)(x, y - 1)aa 中的位置 ii 一定在 (x,y)(x, y)aa 的位置 jj 之后,且满足 pi<pjp_i < p_j

可以发现上述条件是长为 nn 的排列 pp 合法的充要条件,那么这个排列 pp 与两个相同形状的 nn 格杨表组成的杨表对 (λ,μ)(\lambda, \mu) 构成双射:

  • 两个杨表都包含了所有坐标形如 (i,j)(i, j) 的格子,满足 (i,j)(i, j) 为一个合法二元组,且这两个杨表中 1n1 \sim n 恰好出现一次。
  • 对于第一个杨表,有 λi,j<λi,j+1,λi,j<λi+1,j\lambda_{i, j} < \lambda_{i, j + 1}, \lambda_{i, j} < \lambda_{i + 1, j}
  • 对于第二个杨表,有 μi,j<μi,j1,μi,j<μi+1,j\mu_{i, j} < \mu_{i, j - 1}, \mu_{i, j} < \mu_{i + 1, j}

具体的,从 (λ,μ)(\lambda, \mu) 到长为 nn 的合法排列 pp,使 pμi,j=λi,jp_{\mu_{i, j}} = \lambda_{i, j} 即可;从长为 nn 的合法排列 pp(λ,μ)(\lambda, \mu),求出文章一开始的 f,gf, g,使 λfi,gi=pi,μfi,gi=i\lambda_{f_i, g_i} = p_i, \mu_{f_i, g_i} = i 即可。

显然,这样的杨表对一定存在,那么 nn 也一定能够取到上界。λ\lambda 是标准杨表,它的个数可以用勾长公式直接 O(n+A2)O(n + A^2) 求出,但是 μ\mu 不是,所以需要另外想办法计数。我们不直接求出 μ\mu 的方案数,而是转而求出等概率随机一个排列填入 μ\mu 使得其合法的概率 PP,最后乘上 n!n! 即可。

考虑另一个杨表 μ\mu',其中每个数都是 [1,x][1, x] 中的整数,且其满足 μi,jμi,j1,μi,j<μi+1,j\mu'_{i, j} \textcolor{red}{\le} \mu'_{i, j - 1}, \mu'_{i, j} < \mu'_{i + 1, j}。设 μi,j\mu'_{i, j} 的每个位置都在 [1,x][1, x] 中等概率随机时,μ\mu' 合法的概率为 P(x)P'(x),那么有 P=limxP(x)P = \lim_{x \to \infty} P'(x),因为 xx \to \infty 时,μ\mu' 中存在相等的两个数的概率为零。

考虑如何计算 P(x)P'(x)。令满足 i+j=C+1i + j = C + 1 的格子所填的数对 ii 从小到大分别为 s1,s2,,sA+BCs_1, s_2, \dots, s_{A + B - C},那么我们固定 ss 之后就能将合法的 μ\mu' 与平面上起终点分别为 (S1,T1),(S2,T2),,(SA,TA)(S_1, T_1), (S_2, T_2), \dots, (S_A, T_A)AA 条只往右或下走的不交路径组构成双射,具体的,有:

Si=(i,xA+i)Ti={(B+i,i)iCB(C,siC+B)i>CBS_i = (i, x - A + i)\\ T_i = \begin{cases} (B + i, i) & i \le C - B\\ (C, s_{i - C + B}) & i > C - B\\ \end{cases}

那么根据 LGV 引理,有:

P(x)=1s1<s2<<sA+BCxMxnP=limx1s1<s2<<sA+BCxMxnMi,j={(xA+BB+ji)jCB(xsjC+B+CACi)j>CBP'(x) = \frac{\sum_{1 \le s_1 < s_2 < \cdots < s_{A + B - C} \le x}|M|}{x^n}\\ P = \lim_{x \to \infty} \frac{\sum_{1 \le s_1 < s_2 < \cdots < s_{A + B - C} \le x}|M|}{x^n}\\ M_{i, j} = \begin{cases} \binom{x - A + B}{B + j - i} & j \le C - B\\ \binom{x - s_{j - C + B} + C - A}{C - i} & j > C - B\\ \end{cases}

由于我们求的是极值,而分子部分显然是一个多项式,那我们只需要保留最高次项的系数即可:

Mi,j={xB+ji(B+ji)!jCB(xsjC+B)Ci(Ci)!j>CBM_{i, j} = \begin{cases} \frac{x^{B + j - i}}{(B + j - i)!} & j \le C - B\\ \frac{(x - s_{j - C + B})^{C - i}}{(C - i)!} & j > C - B\\ \end{cases}

观察这个矩阵可以发现它的行列式展开后每一项的次数都是相同的,且恰好是 nAB+Cn - A - B + C 次,那么我们可以上下约掉这么多个 xx

P=limx1s1<s2<<sA+BCxMxA+BCMi,j={1(B+ji)!jCB(1sjC+Bx)Ci(Ci)!j>CBP = \lim_{x \to \infty} \frac{\sum_{1 \le s_1 < s_2 < \cdots < s_{A + B - C} \le x}|M|}{x^{A + B - C}}\\ M_{i, j} = \begin{cases} \frac{1}{(B + j - i)!} & j \le C - B\\ \frac{(1 - \frac{s_{j - C + B}}x)^{C - i}}{(C - i)!} & j > C - B\\ \end{cases}

最后,由于 xx \to \infty,所以我们将求和换成积分,将剩余的 xx 全都约掉:

P=01s11sA+BC11MdsA+BCds2ds1Mi,j={1(B+ji)!jCB(1sjC+B)Ci(Ci)!j>CBP = \int_0^1 \int_{s_1}^1 \cdots \int_{s_{A + B - C - 1}}^1 |M| ds_{A + B - C} \cdots ds_2 ds_1\\ M_{i, j} = \begin{cases} \frac{1}{(B + j - i)!} & j \le C - B\\ \frac{(1 - s_{j - C + B})^{C - i}}{(C - i)!} & j > C - B\\ \end{cases}

ss 序列反转,值域翻转:

P=010s10sA+BC1MdsA+BCds2ds1Mi,j={1(B+ji)!jCBsjC+BCi(Ci)!j>CBP = \int_0^1 \int_0^{s_1} \cdots \int_0^{s_{A + B - C - 1}} |M| ds_{A + B - C} \cdots ds_2 ds_1\\ M_{i, j} = \begin{cases} \frac{1}{(B + j - i)!} & j \le C - B\\ \frac{s_{j - C + B}^{C - i}}{(C - i)!} & j > C - B\\ \end{cases}

暴力展开每一项并计算积分的时间复杂度是 O(n+A×A!)O(n + A \times A!) 的。事实上,可以通过归纳法证明:

010x10xn1x1a1x2a2xnandxndx1=k=1n1i=kn(ai+1)\int_0^1 \int_0^{x_1} \cdots \int_0^{x_{n-1}} x_1^{a_1} x_2^{a_2} \cdots x_n^{a_n} \, dx_n \cdots dx_1 = \prod_{k=1}^n \frac{1}{\sum_{i=k}^n (a_i + 1)}

那么我们对于矩阵 MM,按列从右往左扫来状压 DP,设 fSf_S 表示已经选完了后 S|S| 列,并选了 SS 中的行的系数之和,每次转移时 (ai+1)\sum (a_i + 1) 就是已知的。那么我们可以用 O(n+A2A)O(n + A2^A) 的时间复杂度算出 μ\mu 的方案数,将其与 λ\lambda 的方案数乘起来即可。总时间复杂度为 O(n+A2+A2A)O(n + A^2 + A2^A)