atcoder#AGC058E. [AGC058E] Nearer Permutation

[AGC058E] Nearer Permutation

配点 : 14001400

問題文

この問題では,順列と言った際には,(1,2,,N)(1,2,\cdots,N) の順列を指すものとします.

22 つの順列 p,qp,q に対し,それらの距離 d(p,q)d(p,q) を次のように定義します.

  • pp の中で隣接 22 項を swap することを繰り返し,ppqq に一致させることを考える.この時必要な最小の操作回数を d(p,q)d(p,q) とする.

さらに,順列 xx に対し,順列 f(x)f(x) を次のように定義します.

  • y=(1,2,,N)y=(1,2,\cdots,N) とする.ここで,順列 zz であって,d(x,z)d(y,z)d(x,z) \leq d(y,z) を満たすものを考える. これらの中で辞書順最小のものを f(x)f(x) とする.

例えば,x=(2,3,1)x=(2,3,1) の場合,d(x,z)d(y,z)d(x,z) \leq d(y,z) を満たす順列としては,z=(2,1,3),(2,3,1),(3,1,2),(3,2,1)z=(2,1,3),(2,3,1),(3,1,2),(3,2,1) が考えられます. このうち辞書順最小なのは (2,1,3)(2,1,3) なので, f(x)=(2,1,3)f(x)=(2,1,3) となります.

順列 A=(A1,A2,,AN)A=(A_1,A_2,\cdots,A_N) が与えられます. f(x)=Af(x)=A を満たす順列 xx が存在するかどうか判定してください.

11 つの入力ファイルにつき,TT 個のテストケースを解いてください.

数列の辞書順とは?

相異なる数列 SS と数列 TT の大小を判定するアルゴリズムを以下に説明します。

以下では SSii 番目の要素を SiS_i のように表します。また、 SSTT より辞書順で小さい場合は S<TS \lt T 、大きい場合は S>TS \gt T と表します。

  1. SSTT のうち長さが短い方の文字列の長さを LL とします。i=1,2,,Li=1,2,\dots,L に対して SiS_iTiT_i が一致するか調べます。
  2. SiTiS_i \neq T_i である ii が存在する場合、そのような ii のうち最小のものを jj とします。そして、SjS_jTjT_j を比較して、 SjS_jTjT_j より(数として)小さい場合は S<TS \lt T 、大きい場合は S>TS \gt T と決定して、アルゴリズムを終了します。
  3. SiTiS_i \neq T_i である ii が存在しない場合、 SSTT の長さを比較して、SSTT より短い場合は S<TS \lt T 、長い場合は S>TS \gt T と決定して、アルゴリズムを終了します。

制約

  • 1T1500001 \leq T \leq 150000
  • 2N3000002 \leq N \leq 300000
  • (A1,A2,,AN)(A_1,A_2,\cdots,A_N)(1,2,,N)(1,2,\cdots,N) の順列
  • 11 つの入力ファイルにつき,NN の総和は 300000300000 を超えない
  • 入力される値はすべて整数である

入力

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

TT

case1case_1

case2case_2

\vdots

caseTcase_T

各ケースは以下の形式で与えられる.

NN

A1A_1 A2A_2 \cdots ANA_N

出力

各ケースに対し,f(x)=Af(x)=A を満たす順列 xx が存在するならば Yes を,存在しないならば No を出力せよ.

2
2
1 2
2
2 1
Yes
Yes

例えば A=(2,1)A=(2,1) の場合は,x=(2,1)x=(2,1) とすると f(x)=Af(x)=A となります.

6
3
1 2 3
3
1 3 2
3
2 1 3
3
2 3 1
3
3 1 2
3
3 2 1
Yes
Yes
Yes
Yes
No
No

例えば A=(2,3,1)A=(2,3,1) の場合は,x=(3,2,1)x=(3,2,1) とすると,f(x)=Af(x)=A となります.

24
4
1 2 3 4
4
1 2 4 3
4
1 3 2 4
4
1 3 4 2
4
1 4 2 3
4
1 4 3 2
4
2 1 3 4
4
2 1 4 3
4
2 3 1 4
4
2 3 4 1
4
2 4 1 3
4
2 4 3 1
4
3 1 2 4
4
3 1 4 2
4
3 2 1 4
4
3 2 4 1
4
3 4 1 2
4
3 4 2 1
4
4 1 2 3
4
4 1 3 2
4
4 2 1 3
4
4 2 3 1
4
4 3 1 2
4
4 3 2 1
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
No
No
No
No
No
No
No
No
No
No
No
No
No
No