atcoder#ARC134D. [ARC134D] Concatenate Subsequences

[ARC134D] Concatenate Subsequences

题目描述

長さ 2N 2N の数列 a a が与えられます。

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

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

数列の辞書順とは? 相異なる数列 S S と数列 T T の大小を判定するアルゴリズムを以下に説明します。

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

  1. S S T T のうち長さが短い方の数列の長さを L L とします。i=1,2,,L i=1,2,\dots,L に対して Si S_i Ti T_i が一致するか調べます。
  2. Si  Ti S_i\ \neq\ T_i である i i が存在する場合、そのような i i のうち最小のものを j j とします。そして、Sj S_j Tj T_j を比較して、 Sj S_j Tj T_j より(数として)小さい場合は S < T S\ \lt\ T 、大きい場合は S > T S\ \gt\ T と決定して、アルゴリズムを終了します。
  3. Si  Ti S_i\ \neq\ T_i である i i が存在しない場合、 S S T T の長さを比較して、S S T T より短い場合は S < T S\ \lt\ T 、長い場合は S > T S\ \gt\ T と決定して、アルゴリズムを終了します。

输入格式

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

N N a1 a_{1} \cdots a2N a_{2N}

输出格式

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

题目大意

给定一个长度为 2N2N 的正整数序列 aa,你需要在前 NN 个数中删除若干个数(不能全删),如果删除了第 ii 个数,那么第 i+Ni+N 个数也会被删除,求出在所有的删除方案中,最终留下的数列字典序最小的方案,输出最后留下的数列。

3
2 1 3 1 2 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

提示

制約

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

Sample Explanation 1

- x = (2) x\ =\ (2) とします。 - このとき、作られる数列は (1,2) (1,2) となり辞書順最小です。