会员专享
请先
登录,登录后可使用今日免费解锁;
开通会员后可解锁完整内容。
解题思路
题目要求统计所有「最大值与最小值之差不超过 K」的连续子数组(稳定批次)个数,单个元素也视为一个稳定批次。
关键观察:区间合法性对收缩单调。 若区间 [l,r] 的极差已经超过 K,那么任何包含它的更大区间极差只会更大,也一定不合法;反之,[l,r] 合法时它的任意子区间都合法。因此对每个右端点 r,合法左端点的集合是一段后缀 [Lr,r],并且 Lr 随 r 增大而单调不减。这正好可以用**滑动窗口(双指针)**处理:右端点不断右移,窗口不合法时再右移左端点。
窗口最值用单调队列维护。 窗口右移时加入 P[r]、左移时移出 P[l],需要在均摊 O(1) 时间内得到窗口最大值与最小值:
maxq 是存下标的单调递减队列:入队前把队尾所有 ≤P[r] 的下标弹出,队首永远是当前窗口最大值的下标;