atcoder#ARC127E. [ARC127E] Priority Queue

[ARC127E] Priority Queue

题目描述

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

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

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

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

输入格式

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

A A B B X1 X_1 X2 X_2 \cdots XA+B X_{A+B}

输出格式

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

题目大意

给定一个长度为 a+ba+b 的序列 xx,并且刚好有 aa 个 1,bb 个 2。

有一个集合 ss,初始是空的,将会做 a+ba+b 次操作,第 ii 次操作如下:

  1. xi=1x_i=1,选择一个数 v[1,a]v\in[1,a],并把这个数加入到集合中,这里 vv 必须是之前没有选择过的数
  2. xi=2x_i=2,将集合中最大的数删掉

问最后 ss 能有几种状态。

  • 1a,b50001\le a,b\le 5000
3 1
1 1 2 1
2
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

提示

制約

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

Sample Explanation 1

最終的な s s としてありうる状態は,s={1,2},{1,3} s=\{1,2\},\{1,3\} 2 2 通りです. 例えば,以下のように操作すると,最終的に s={1,3} s=\{1,3\} となります. - i=1 i=1 : s s 2 2 を追加する. - i=2 i=2 : s s 1 1 を追加する. - i=3 i=3 : s s から 2 2 を削除する. - i=4 i=4 : s s 3 3 を追加する.