atcoder#ARC134D. [ARC134D] Concatenate Subsequences

[ARC134D] Concatenate Subsequences

配点 : 600600

問題文

長さ 2N2N の数列 aa が与えられます。

すぬけ君が (1,2,,N)(1,2, \ldots, N)空でない(連続するとは限らない)部分列 x=(x1,x2,,xk)x=(x_1,x_2,\ldots,x_k) を用いて、数列を作ろうとしています。 作られる数列は、aax1x_1 番目、x2x_2 番目、\ldotsxkx_k 番目、x1+Nx_{1}+N 番目、\ldotsxk+Nx_{k}+N 番目の要素を抜き出してこの順で連結した数列です。

すぬけ君が作ることができる数列のうち、辞書順最小のものを求めてください。

数列の辞書順とは?

相異なる数列 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 と決定して、アルゴリズムを終了します。

制約

  • 与えられる入力は全て整数
  • 1N1051 \leq N \leq 10^5
  • 1ai1091 \leq a_i \leq 10^9

入力

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

NN

a1a_{1} \cdots a2Na_{2N}

出力

すぬけ君が作ることができる数列のうち、辞書順最小のものを出力せよ。

3
2 1 3 1 2 2
1 2
  • x=(2)x = (2) とします。
  • このとき、作られる数列は (1,2)(1,2) となり辞書順最小です。
10
38 38 80 62 62 67 38 78 74 52 53 77 59 83 74 63 80 61 68 55
38 38 38 52 53 77 80 55
12
52 73 49 63 55 74 35 68 22 22 74 50 71 60 52 62 65 54 70 59 65 54 60 52
22 22 50 65 54 52