atcoder#AGC028E. [AGC028E] High Elements

[AGC028E] High Elements

配点 : 14001400

問題文

(1, 2, ... N)(1,\ 2,\ ...\ N) の順列 PP が与えられます。

0, 1 からなる長さ NN の文字列 SSよい文字列であるかどうかは、以下の様に判定されます。

  • 数列 XX, YY を次のように構築する。- まず、XX, YY を空の数列とする。
    • i=1, 2, ... Ni=1,\ 2,\ ...\ N について、この順に、Si=S_i= 0 なら XX の末尾に、Si=S_i= 1 なら YY の末尾に PiP_i を追加する。
  • まず、XX, YY を空の数列とする。
  • i=1, 2, ... Ni=1,\ 2,\ ...\ N について、この順に、Si=S_i= 0 なら XX の末尾に、Si=S_i= 1 なら YY の末尾に PiP_i を追加する。
  • XX の中にある高い項の個数と YY の中にある高い項の個数が等しいならば、SS はよい文字列である。 ここで、ある数列の ii 番目の項が高いとは、その項が数列の 11 番目から ii 番目の項の中で最大であることを意味する。

よい文字列が存在するか判定し、存在するならその中で辞書順最小のものを求めてください。

制約

  • 1N2×1051 \leq N \leq 2 \times 10^5
  • 1PiN1 \leq P_i \leq N
  • P1, P2, ... PNP_1,\ P_2,\ ...\ P_N はすべて異なる。
  • 入力はすべて整数である。

入力

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

NN

P1P_1 P2P_2 ...... PNP_N

出力

よい文字列が存在しないならば -1 と出力せよ。 存在するならば、その中で辞書順最小のものを出力せよ。

6
3 1 4 6 2 5
001001

S=S= 001001 とすると、X=(3, 1, 6, 2)X=(3,\ 1,\ 6,\ 2), Y=(4, 5)Y=(4,\ 5) となります。 XX の中で高い項は、11 項目と 33 項目です。 また、YY の中で高い項は、11 項目と 22 項目です。 高い項の数が等しいので、001001 はよい文字列です。 これより辞書順で小さいよい文字列は存在しないので、001001 が答えになります。

5
1 2 3 4 5
-1
7
1 3 2 5 6 4 7
0001101
30
1 2 6 3 5 7 9 8 11 12 10 13 16 23 15 18 14 24 22 26 19 21 28 17 4 27 29 25 20 30
000000000001100101010010011101