atcoder#ARC080C. [ARC080E] Young Maids

[ARC080E] Young Maids

配点 : 800800

問題文

NN を正の偶数とします。

(1,2,...,N)(1, 2, ..., N) の順列 p=(p1,p2,...,pN)p = (p_1, p_2, ..., p_N) があります。 すぬけ君は、次の手続きによって (1,2,...,N)(1, 2, ..., N) の順列 qq を作ろうとしています。

まず、空の数列 qq を用意します。 pp が空になるまで、次の操作を繰り返します。

  • pp の隣り合う 22 つの要素を選び、順に xx, yy とする。 xx, yypp から取り除き (このとき、pp22 だけ短くなる)、xx, yy をこの順のまま qq の先頭へ追加する。

pp が空になったとき、qq(1,2,...,N)(1, 2, ..., N) の順列になっています。

辞書順で最小の qq を求めてください。

制約

  • NN は偶数である。
  • 2N2×1052 \leq N \leq 2 \times 10^5
  • pp(1,2,...,N)(1, 2, ..., N) の順列である。

入力

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

NN

p1p_1 p2p_2 ...... pNp_N

出力

辞書順で最小の qq を空白区切りで出力せよ。

4
3 2 4 1
3 1 2 4

次の順に操作を行えばよいです。

pp qq
(3,2,4,1)(3, 2, 4, 1) ()()
(3,1)(3, 1) (2,4)(2, 4)
()() (3,1,2,4)(3, 1, 2, 4)
2
1 2
1 2
8
4 6 3 2 8 5 7 1
3 1 2 7 4 6 8 5

次の順に操作を行えばよいです。

pp qq
(4,6,3,2,8,5,7,1)(4, 6, 3, 2, 8, 5, 7, 1) ()()
(4,6,3,2,7,1)(4, 6, 3, 2, 7, 1) (8,5)(8, 5)
(3,2,7,1)(3, 2, 7, 1) (4,6,8,5)(4, 6, 8, 5)
(3,1)(3, 1) (2,7,4,6,8,5)(2, 7, 4, 6, 8, 5)
()() (3,1,2,7,4,6,8,5)(3, 1, 2, 7, 4, 6, 8, 5)