atcoder#AGC054C. [AGC054C] Roughly Sorted

[AGC054C] Roughly Sorted

配点 : 800800

問題文

すぬけくんは,(1, 2, ... N)(1,\ 2,\ ...\ N) の順列 P=(P1,P2,,PN)P=(P_1,P_2,\cdots,P_N) と整数 KK をもらいました. そこですぬけくんは,PP の隣接する二項をswapすることを繰り返して,以下の条件が満たされるようにしました.

  • それぞれの 1iN1 \leq i \leq N について, 1j<i1 \leq j< i, Pj>PiP_j>P_i を満たす jj が高々 KK 個である.

ここで,すぬけくんは最小の操作回数でこの条件を達成しました.

すべての操作が終わったあと,すぬけくんは元の順列を忘れてしまいました. 操作後の順列 PP' が与えられるので,元の順列 PP としてあり得るものが何通りあるかを 998244353998244353 で割った余りを求めてください.

制約

  • 2N50002 \leq N \leq 5000
  • 1KN11 \leq K \leq N-1
  • 1PiN1 \leq P'_i \leq N
  • PiPjP'_i \neq P'_j (iji \neq j)
  • それぞれの 1iN1 \leq i \leq N について, 1j<i1 \leq j< i, Pj>PiP'_j>P'_i を満たす jj が高々 KK 個である
  • 入力される値はすべて整数である

入力

入力は以下の形式で標準入力から与えられる.

NN KK

P1P'_1 P2P'_2 \cdots PNP'_N

出力

答えを出力せよ.

3 1
3 1 2
2

PP として考えられるのは以下の 22 通りです.

  • P=(3,1,2)P=(3,1,2): 最小の操作回数は 00 回です.操作後の順列は PP' に一致します.
  • P=(3,2,1)P=(3,2,1): 最小の操作回数は 11 回です.P2P_2P3P_3 をswapすることで,P=(3,1,2)P=(3,1,2) となり,これは条件を満たします.操作後の順列は PP' に一致します.
4 3
4 3 2 1
1
5 2
4 2 1 5 3
3