、

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\) 个值。

posted @ 2026-09-24 14:44  tanghg  阅读(7)  评论(0)    收藏  举报