P5999】求排列 pp 的数量,满足 pip_i 两边的数同时小于或大于 pip_i,且 p1=Sp_1=S, pN=Tp_N=T

f(n,m)f(n,m):前 nn 小的值分成 mm 段的方案数。

从小到大加入每一个数,考虑现在枚举到 nn,若 nSn \neq SnTn\neq T,则可以分三种情况讨论:

  1. 新开一段
    • nSn \neq SnTn\neq T,以后 nn 两侧的都比它大,与题意相符,转移 f(n,m)(m[n>S][n>T])f(n1,m1)f(n,m) \gets (m-[n>S]-[n>T]) f(n-1,m-1)
    • n=Sn = Sn=Tn = T,与题意相符,转移 f(n,m)f(n1,m1)f(n,m) \gets f(n-1,m-1)
  2. 接在某一段头 / 尾
    • nSn \neq SnTn\neq T,以后一定有一个 >n>n 的数接在 nn 另一侧,nn 两侧就有一个大于的和一个小于的,与题意不符。
    • n=Sn = Sn=Tn = T,与题意相符,转移 f(n,m)f(n1,m)f(n,m) \gets f(n-1,m)
  3. 将两段连起来
    • nSn \neq SnTn\neq T,此时 nn 两侧的都比它小,与题意相符,转移 f(n,m)mf(n1,m+1)f(n,m) \gets m f(n-1,m+1)
    • n=Sn = Sn=Tn = T,与题意不符。

答案为 f(N,1)f(N,1)