考虑一个判定算法,从大到小枚举编号,记录最终哪些高度的石柱编号已经确定了,那么当前石柱的最终高度就是不高于初始高度的最大的还没有确定的高度。
设 $f(i,j)$ 表示 $i,\dots,2N$ 的石柱的最终高度钦定有极大前缀 $1,\dots,j$。
考虑转移:
- 若 $i \in A$,则必然有 $1\le h_i \le j$,否则可以取到 $j+1$。
似乎还是不太好做,考虑区分同一种高度的两根石柱,则方案数就是 $j$ 减去 $i,\dots,2N$ 中没有留到最后的个数。 - 若 $i \notin A$,若其最终高度 $>j+1$,则延迟计算其贡献(在扩展前缀时计算);
否则,枚举前缀扩展了 $k$,则 $h_i$ 可以取 $k+1$ 种值,然后选取 $j+2,\dots,j+k$ 共 $k-1$ 种最终高度的出现位置,然后乘一个系数 $g_{k-1}$。
$g_k$ 是一个子问题:填入 $1,\dots,k$ 的初始高度,使得最终高度恰为 $1,\dots,k$ 的方案数。
根据前面的判定算法,条件就是对每个 $1 \le i \le k$ 都满足不大于 $i$ 的元素个数不超过 $i$。
设 $g(i,j)$ 表示在 $j$ 个位置填入 $1,\dots,i$ 的元素的方案数,则
$$
g(i,j) = g(i-1,j) + 2j \cdot g(i-1,j-1) + j(j-1) \cdot g(i-1,j-2)
$$
则 $g_k = g(k, k)$。