#arc098c. [arc098_c]Range Minimum Queries

[arc098_c]Range Minimum Queries

问题描述

给定一个长度为NN的整数序列AA和一个整数KK。你将对这个序列执行以下操作QQ次:

  • 选择一个长度为KK的连续子序列,然后移除其中包含的KK个元素中最小的元素(如果有多个这样的元素,任选一个)。

XXYY分别为执行QQ次操作后移除的最大和最小元素的值。你希望XYX-Y尽可能小。找出当操作进行得最优时,XYX-Y的最小值。

约束条件

  • 1N20001 \leq N \leq 2000
  • 1KN1 \leq K \leq N
  • 1QNK+11 \leq Q \leq N-K+1
  • 1Ai1091 \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

在第一次操作中,无论我们选择哪个长度为33的连续子序列,其中的最小元素都是11。因此,第一次操作移除了A3=1A_3=1,现在我们有A=(4,3,5,2)A=(4,3,5,2)。在第二次操作中,最优的选择是选择长度为33的连续子序列(A2,A3,A4)=(3,5,2)(A_2,A_3,A_4)=(3,5,2)并移除A4=2A_4=2。这种情况下,最大和最小被移除的元素分别为2211,它们的差值为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