Official
F - 部分列/Subsequence Editorial
by
F - 部分列/Subsequence Editorial
by
sounansya
問題は以下のように言い換えることができます。
- 以下の条件を満たす整数列 \((i_1,i_2,\ldots,i_N)\) が存在するか判定してください。
- \(1\le i_1 < i_2 < \ldots < i_N \le M\)
- \(1\le k\le N\) に対し \(A_k=B_{i_k}\)
この言い換えから、 \(i_1\) から順番に探索する際、 \(i_1\) の選択肢が複数あった際にその中で最も小さい値を採用しても良いことが分かります。 これにより前から順番に決めていく貪欲が正答であることが分かります。
n, m = map(int, input().split())
a = list(map(int, input().split()))
b = list(map(int, input().split()))
idx = 0
for v in a:
while idx < m and b[idx] != v:
idx += 1
idx += 1
print("Yes" if idx <= m else "No")
posted:
last update:
