题目大意:
给定一个序列 a[1..n],对于每个长度为 m 的连续子区间,求出区间 a 的最大值以及从左往右扫描该区间时 a 的最大值的变化次数。
$1 ≤ m ≤ n ≤ 10^7$。
解题思路:
求区间最大值,我首先想到的是很经典的滑动窗口求区间最大值问题。
对于这个问题,因为还要求最大值的变化次数,所以直接利用滑窗的话变化次数不好求。
于是就有题解上说的考虑按照 r 从 n 到 m 的顺序倒着求出每个区间的答案了。此时所维护的值是从大到小的顺序(因为倒着求的嘛),而对应的变化次数就是队列中元素的个数。
考虑到直接上deque挺耗时的,所以直接通过数组模拟就OK了。
【注意】
完善a数组时要注意精度问题。
Mycode:
1 |
|