题目
给出一个长度为n的数列,求有几个区间满足:区间内最大值-最小值<=k。(1<=n<=5e4,0<=k<=1e9,0<=a[i]<=1e9)
思路
用两个单调队列,一个记录区间最大值,一个记录区间最小值。
若一个区间满足条件,那它的子区间也满足条件。
两个指针l,r表示当前枚举的可行区间。
枚举r,再不断调整l,使这个区间可行,此时答案加上r-l+1。
为什么加上r-l+1就不会少也不会重复呢?
因为此时区间[l,r],[l+1,r]…[r,r]都是可行的,并不与之前重复。
(代码中的l有点不一样,所以不是加r-l+1,而是加r-l)
代码
1 |
|
结束,又水了一题(哈哈),谢谢!!