atcoder#AGC058A. [AGC058A] Make it Zigzag

[AGC058A] Make it Zigzag

题目描述

(1,2,,2N) (1,2,\cdots,2N) の順列 P=(P1,P2,,P2N) P=(P_1,P_2,\cdots,P_{2N}) が与えられます.

あなたは,以下の操作を 0 0 回以上 N N 回以下行うことができます.

  • 整数 x x (1  x  2N1 1\ \leq\ x\ \leq\ 2N-1 ) を選ぶ. Px P_x Px+1 P_{x+1} の値を入れ替える.

操作後の P P が以下の条件を満たすような操作列を 1 1 つ示してください.

  • i=1,3,5,,2N1 i=1,3,5,\cdots,2N-1 について,Pi < Pi+1 P_i\ <\ P_{i+1} である.
  • i=2,4,6,,2N2 i=2,4,6,\cdots,2N-2 について,Pi > Pi+1 P_i\ >\ P_{i+1} である.

なお,条件を満たすような操作列が必ず存在することが証明できます.

输入格式

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

N N P1 P_1 P2 P_2 \cdots P2N P_{2N}

输出格式

以下の形式で操作列を出力せよ.

K K x1 x_1 x2 x_2 \cdots xK x_K

ここで,K K は行う操作の回数 (0  K  N 0\ \leq\ K\ \leq\ N ) であり,xi x_i (1  xi  2N1 1\ \leq\ x_i\ \leq\ 2N-1 ) は i i 回目の操作で選ぶ x x の値である. 条件を満たす解が複数存在する場合,どれを出力しても正解とみなされる.

题目大意

题目描述

给定一个排列 P=(P1,P2,,P2N) P=(P_1,P_2,\cdots,P_{2N}) ,其中 (1,2,,2N) (1,2,\cdots,2N)

你可以进行以下操作 0 0 N N 次:

  • 选择一个整数 x x (1  x  2N1 1\ \leq\ x\ \leq\ 2N-1 ),交换 Px P_x Px+1 P_{x+1} 的值。

请找出一系列操作,使得操作后的 P P 满足以下条件:

  • 对于每个 i=1,3,5,,2N1 i=1,3,5,\cdots,2N-1 Pi < Pi+1 P_i\ <\ P_{i+1}
  • 对于每个 i=2,4,6,,2N2 i=2,4,6,\cdots,2N-2 Pi > Pi+1 P_i\ >\ P_{i+1}

请输出满足条件的一系列操作,以以下形式输出:

K K x1 x_1 x2 x_2 \cdots xK x_K

其中,K K 表示操作次数 (0  K  N 0\ \leq\ K\ \leq\ N ),xi x_i (1  xi  2N1 1\ \leq\ x_i\ \leq\ 2N-1 ) 表示第 i i 次操作选择的 x x 的值。如果存在多个满足条件的解,任意输出一个即可。

输入格式

从标准输入中按以下格式给出输入:

N N P1 P_1 P2 P_2 \cdots P2N P_{2N}

输出格式

按以下格式输出操作序列:

K K x1 x_1 x2 x_2 \cdots xK x_K

样例 #1

样例输入 #1

2
4 3 2 1

样例输出 #1

2
1 3

样例 #2

样例输入 #2

1
1 2

样例输出 #2

0

提示

约束条件

  • 1  N  105 1\ \leq\ N\ \leq\ 10^5
  • (P1,P2,,P2N) (P_1,P_2,\cdots,P_{2N}) (1,2,,2N) (1,2,\cdots,{2N}) 的排列
  • 输入的数值均为整数

样例解释 1

P=(4,3,2,1) P=(4,3,2,1) 根据操作后,得到 P=(3,4,1,2) P=(3,4,1,2),满足条件。

2
4 3 2 1
2
1 3
1
1 2
0

提示

制約

  • 1  N  105 1\ \leq\ N\ \leq\ 10^5
  • (P1,P2,,P2N) (P_1,P_2,\cdots,P_{2N}) (1,2,,2N) (1,2,\cdots,{2N}) の順列
  • 入力される値はすべて整数である

Sample Explanation 1

操作後は P=(3,4,1,2) P=(3,4,1,2) となり,条件を満たします.