atcoder#ARC101B. [ABC107D] Median of Medians

[ABC107D] Median of Medians

配点 : 700700

問題文

長さ MM の数列 bb中央値 を次のように定義します。

  • bb を昇順にソートして得られる数列を bb' とする。 このとき、bb'M/2+1M / 2 + 1 番目の要素の値を、bb の中央値とする。 ここで、// は小数点以下を切り捨てる除算である。

例えば、(10,30,20)(10, 30, 20) の中央値は 2020 であり、(10,30,20,40)(10, 30, 20, 40) の中央値は 3030 であり、(10,10,10,20,30)(10, 10, 10, 20, 30) の中央値は 1010 です。

すぬけ君は次のような問題を思いつきました。

長さ NN の数列 aa があります。 各 (l,r)(l, r) (1lrN1 \leq l \leq r \leq N) について、aa の連続部分列 (al,al+1,...,ar)(a_l, a_{l + 1}, ..., a_r) の中央値を ml,rm_{l, r} とします。 すべての (l,r)(l, r) に対する ml,rm_{l, r} を並べ、新たに数列 mm を作ります。 mm の中央値を求めてください。

制約

  • 1N1051 \leq N \leq 10^5
  • aia_i は整数である。
  • 1ai1091 \leq a_i \leq 10^9

入力

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

NN

a1a_1 a2a_2 ...... aNa_N

出力

mm の中央値を出力せよ。

3
10 30 20
30

aa のそれぞれの連続部分列の中央値は次のようになります。

  • (10)(10) の中央値は 1010
  • (30)(30) の中央値は 3030
  • (20)(20) の中央値は 2020
  • (10,30)(10, 30) の中央値は 3030
  • (30,20)(30, 20) の中央値は 3030
  • (10,30,20)(10, 30, 20) の中央値は 2020

よって、m=(10,30,20,30,30,20)m = (10, 30, 20, 30, 30, 20) となり、mm の中央値は 3030 です。

1
10
10
10
5 9 5 9 8 9 3 5 4 3
8