#arc098c. [arc098_c]Range Minimum Queries

[arc098_c]Range Minimum Queries

問題文

長さ NN の数列 AA と整数 KK が与えられます。 この配列に、以下の操作を QQ 回行います。

  • 長さ KK の連続する部分列を 11 つ選ぶ。 そして、選んだ部分列に含まれる KK 個の要素のうち最小のもの(複数ある場合はその中で好きなものを 11 個)を取り除く。

QQ 回の操作で取り除いた要素の最大値、最小値をそれぞれ XX, YY としたときに、XYX-Y をできるだけ小さくしたいです。 QQ 回の操作を適切に行ったときの XYX-Y の最小値を求めてください。

制約

  • 1leqNleq20001 \\leq N \\leq 2000
  • 1leqKleqN1 \\leq K \\leq N
  • 1leqQleqNK+11 \\leq Q \\leq N-K+1
  • 1leqAileq1091 \\leq A_i \\leq 10^9
  • 入力はすべて整数である

入力

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

NN KK QQ A1A_1 A2A_2 ...... ANA_N

出力

XYX-Y の最小値を出力せよ。


入力例 1

5 3 2
4 3 1 5 2

出力例 1

1

11 回目の操作では、どの長さ 33 の連続する部分列を選んでも、そのうち最小の要素は 11 です。 よって、11 回目の操作によって A3=1A_3=1 が取り除かれ、A=(4,3,5,2)A=(4,3,5,2) となります。 22 回目の操作では、連続する長さ 33 の部分列として、(A2,A3,A4)=(3,5,2)(A_2,A_3,A_4)=(3,5,2) を選び、A4=2A_4=2 を取り除くのが最適です。 この場合、取り除いた要素の最大値は 22、最小値は 11 になるので、その差は 21=12-1=1 になります。


入力例 2

10 1 6
1 1 2 3 5 8 13 21 34 55

出力例 2

7

入力例 3

11 7 5
24979445 861648772 623690081 433933447 476190629 262703497 211047202 971407775 628894325 731963982 822804784

出力例 3

451211184