メルカリ競プロコンテスト2024
コンテスト日時
2024/10/05 (Sa) 13:45 - 15:45

H - AB test

ผักชี
5
s
1024
MB
675

問題文

長さ $N$ の数列 $X = (X_1, X_2 \ldots, X_N)$ に対して、次の手順を繰り返して得られる長さ $N$ の数列 $C$ を、$X$ の閲覧順と定義します。閲覧順は、数列 $X$ に対して一意に定まりません。

手順:

  1. 空の数列 $C$ と、集合 $S$ を用意する。はじめ $S$ の要素は、組 $(1, N)$ のみである
  2. 以下の操作を順に、$S$ が空になるまで合計 $N$ 回繰り返す
    • 集合 $S$ から任意の一つの組 $(l, r)$ を選び、$S$ から取り除く
    • $X_l, X_{l+1}, \ldots, X_r$ の最小値を $X_{m}$ としたとき:
      • $C$ の末尾に $m$ を追加する
      • $l \neq m$ のとき、$S$ に組 $(l, m-1)$ を追加する
      • $r \neq m$ のとき、$S$ に組 $(m+1, r)$ を追加する

長さ $N$ の数列 $A = (A_1, A_2 \ldots, A_N)$ と、長さ $M$ の数列 $B = (B_1, B_2 \ldots, B_M)$ が与えられます。

次の条件を満たす $A$ の(連続とは限らない) 部分列 $A^{'}$ が存在するかどうかを判定してください。

条件:

  • $A^{'}$ の閲覧順と $B$ の閲覧順を一致させることができる

制約

  • $1 \leq N \leq 2{,}000$
  • $1 \leq M \leq N$
  • $A_1, A_2 \ldots, A_N$ は、$(1, 2 \ldots, N)$ を並び替えて作られる順列
  • $B_1, B_2 \ldots, B_M$ は、$(1, 2 \ldots, M)$ を並び替えて作られる順列

入力

入力は以下の形式で与えられる。

$N$ $M$
$A_1$ $A_2$ $\dots$ $A_N$
$B_1$ $B_2$ $\dots$ $B_M$

出力

条件を満たす $A$ の部分列 $A^{'}$ が存在するなら Yes を、できないなら No を一行に出力してください。

入力例 1
10 5 1 10 3 5 8 9 2 4 7 6 3 1 5 2 4
出力例 1
Yes

$A=(1, 10, 3, 5, 8, 9, 2, 4, 7, 6)$ から要素 $1$, $5$, $8$, $2$, $6$ を取り除いて作られる部分列 $A^{'} =(10, 3, 9, 4, 7)$ を考えます。

例えば、列 $(2, 4, 5, 3, 1)$ は、$ A^{'}$ の閲覧順の一例であり、$B$ の閲覧順の一例でもあります。
よって、Yes を出力します。

入力例 2
2 2 2 1 1 2
出力例 2
No
提出
C++23 (g++ 12.2.0)