F - FILO Sort
Editorial
/
Time Limit: 4 sec / Memory Limit: 750 MB
問題文
(1, 2, ..., N) の順列 a_i と Q 個のクエリが与えられる。i 番目のクエリの内容は、x_i が与えられるので数列の x_i 番目と x_i+1 番目の要素の値を入れ替える、というクエリである。
クエリで数列が変更されるたびに、それが良い数列となっているか判定せよ。ただし良い数列は以下のように定義される数列である。
3 つのスタックを考える。それぞれを stack1、stack2、stack3 と呼ぶことにする。最初に、stack1 に a_1, a_2, ..., a_n をこの順に push する。その後、
- stack1 から pop し、pop した整数を x とする。x を stack2 に push する。
- stack2 から pop し、pop した整数を x とする。x を stack3 に push する。
という 2 種類の動作を好きなように行い、stack3 の要素を先頭から見た時 1, 2, ..., N となるように出来るとき、a_i は良い数列である。
ただし、push とはスタックの末尾に要素を追加する動作、pop はスタックの末尾から要素を取り出す動作のことを指す。
入力
入力は以下の形式で標準入力から与えられる。
N a_1 a_2 a_3 ... a_N Q x_1 x_2 : x_Q
- 1 行目には順列の長さ N(2 ≦ N ≦ 100,000) が与えられる。
- 2 行目には数列 a_i が空白区切りで与えられる
- 3 行目にはクエリの個数 Q(1 ≦ Q ≦ 100,000) が与えられる。
- 続く Q 行にはクエリの内容を表す整数 x_i (1 ≦ x_i ≦ N-1) が与えられる。
出力
出力は標準出力に行い、末尾に改行を入れること。
出力は Q 行からなる。
i 行目には、i 番目のクエリの後に a_i が良い数列となっているならば Yes
、そうでなければ No
と出力せよ。
入力例 1
3 1 3 2 6 2 2 1 2 1 2
出力例 1
Yes No Yes Yes Yes Yes