题外话:bzoj2096现在找不到了。。。要交还是上洛谷。。。
题意简述
给定n,k和一个长度为n的序列,求最长的最大值最小值相差不超过k的连续序列(翻译的很清楚)。
数据
输入:
3 9
5 1 3 5 8 6 6 9 10
输出:
4
解释:
5 8 6 6 和 8 6 6 9都是正确的
思路
线段树+二分长度好像珂以做,但是只能拿 80 80 80分,因为n到了 3 e 6 3e6 3e6, n l o g n l o g n nlognlogn nlognlogn的做法不太珂靠。所以我们考虑强行套使用单调队列。
(由于博主刚刚学单调队列,所以只能强行套)
(考虑到读者很多也是初学单调队列,所以我站在了一个十分好的写博客角度。。。)
显然,要求最大和最小,就要维护两个优先队列,取名 Q x Qx Qx和 Q n Qn Qn。(在代码中,以 x x x结尾的命名就是和求最大值有关的,以 n n n结尾就是和求最小值有关的)。 Q x Qx Qx要保证单调递减,那么