P14568 【MX-S12-T3】排列
题意
求出有多少个排列 \(a_1, \ldots, a_n\) 满足:
对于每个下标满足其中一种限制:
- \(a_i < \min_{j < i} a_j\)
- \(a_i > \max_{j < i} a_j\)
- \(a_i < \min_{j > i} a_j\)
- \(a_i > \max_{j > i} a_j\)
答案对 \(998244353\) 取模。
\(n\le 5000\)
思路
对于这种排列问题我们可以考虑按位置插值或按值插位置。这里我们显然考虑后者。
我们相当于维护依次插入 \(1,2,3\cdots\) 的位置,那么操作就变成了:
- 在目前插入的左侧
- 在目前插入的右侧
- 随意插入,但是后面的只能在右侧出现
- 随意插入,但是后面的只能在左侧出现
那么又因为我们只关心相对位置,可以考虑 \(f_{i,j}\) 表示考虑到前 \(i\) 个位置,现在还有 \(j\) 个空位可以插入。
对于前两个操作,有 \(f_{i,j}\to f_{i+1,j+1}\),因为无论在左侧还是右侧都相当于多了一个空位可以插入。
对于后两个操作,可以有 \(\sum_{k\ge j}f_{i,k}\to f_{i+1,j}\),这是因为可以考虑合并两个段,即这两个段之间不再插入其他位置,所以还是只有 \(j\) 个值。

浙公网安备 33010602011771号