首先考虑区间
[l,r]
的长度小于
L
,那么就是区间最大值最小值,使用单调队列解决。
对于
L≤r−l+1≤R
:
首先二分答案
ans
,判断是否存在
i,j满足aj−ai≥(j−i+k)ans
设
[l,r]
中的最大值在最小值后面即
i<j
。
令
ci=ai−i∗ans
,则有
cj−ci≥k∗ans
,求
max{cj−ci}
与
k∗ans
比较即可。
枚举
i
,问题转换成在
[i+L−1,i+R−1]
中求最大的
cj
。
发现其左右端点都随
i
单调,于是单调队列维护区间最值就可以解决。
对于最大值在最小值前面的情况,只要将
c
数组倒置,再做一次。
时间复杂度
O(nlogn)
,期望100分。