atcoder#ARC134D. [ARC134D] Concatenate Subsequences
[ARC134D] Concatenate Subsequences
配点 : 点
問題文
長さ の数列 が与えられます。
すぬけ君が の空でない(連続するとは限らない)部分列 を用いて、数列を作ろうとしています。 作られる数列は、 の 番目、 番目、、 番目、 番目、、 番目の要素を抜き出してこの順で連結した数列です。
すぬけ君が作ることができる数列のうち、辞書順最小のものを求めてください。
数列の辞書順とは?
相異なる数列 と数列 の大小を判定するアルゴリズムを以下に説明します。
以下では の 番目の要素を のように表します。また、 が より辞書順で小さい場合は 、大きい場合は と表します。
- と のうち長さが短い方の数列の長さを とします。 に対して と が一致するか調べます。
- である が存在する場合、そのような のうち最小のものを とします。そして、 と を比較して、 が より(数として)小さい場合は 、大きい場合は と決定して、アルゴリズムを終了します。
- である が存在しない場合、 と の長さを比較して、 が より短い場合は 、長い場合は と決定して、アルゴリズムを終了します。
制約
- 与えられる入力は全て整数
入力
入力は以下の形式で標準入力から与えられる。
出力
すぬけ君が作ることができる数列のうち、辞書順最小のものを出力せよ。
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