atcoder#ARC127E. [ARC127E] Priority Queue

[ARC127E] Priority Queue

配点 : 800800

問題文

長さ A+BA+B の整数列 (X1,X2,,XA+B)(X_1,X_2,\cdots,X_{A+B}) が与えられます. XX はちょうど AA 個の 11 とちょうど BB 個の 22 を含みます.

すぬけくんは集合 ss を持っており,最初 ss は空です. 彼は今から,A+BA+B 回の操作を行います. ii 回目の操作は以下のような行動です.

  • Xi=1X_i=1 の時: 1vA1 \leq v \leq A を満たす整数 vv を選び,ss に追加する. ただし,今までの操作で選んだことのある整数は vv として選べない.
  • Xi=2X_i=2 の時: ss の中で最大値となる要素を削除する. なお,この操作の直前に ss が空でないことは入力から保証される.

最終的な ss としてありうる集合は何通りあるでしょうか? 答えを 998244353998244353 で割った余りを求めてください.

制約

  • 1A50001 \leq A \leq 5000
  • 0BA10 \leq B \leq A-1
  • 1Xi21 \leq X_i \leq 2
  • Xi=1X_i=1 を満たす ii がちょうど AA 個存在する.
  • Xi=2X_i=2 を満たす ii がちょうど BB 個存在する.
  • Xi=2X_i=2 の操作を行う直前で ss は空ではない.
  • 入力される値はすべて整数である.

入力

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

AA BB

X1X_1 X2X_2 \cdots XA+BX_{A+B}

出力

答えを 998244353998244353 で割った余りを出力せよ.

3 1
1 1 2 1
2

最終的な ss としてありうる状態は,s={1,2},{1,3}s=\{1,2\},\{1,3\}22 通りです.

例えば,以下のように操作すると,最終的に s={1,3}s=\{1,3\} となります.

  • i=1i=1: ss22 を追加する.
  • i=2i=2: ss11 を追加する.
  • i=3i=3: ss から 22 を削除する.
  • i=4i=4: ss33 を追加する.
20 6
1 1 1 1 1 2 1 1 1 2 1 2 1 2 1 2 1 1 1 1 2 1 1 1 1 1
5507