来看一道题
题目描述
有一个 1 ∗ n 的矩阵,有 n 个正整数。
现在给你一个可以盖住连续的 k 的数的木板。
一开始木板盖住了矩阵的第 1 ∼ k 个数,每次将木板向右移动一个单位,直到右端与第 n 个数重合。
每次移动前输出被覆盖住的最大的数是多少。
输入格式
第一行两个数,n,k,表示共有 n 个数,木板可以盖住 k 个数。
第二行 n 个数,表示矩阵中的元素。
输出格式
共 n − k + 1 行,每行一个正整数。
第 i 行表示第 i ∼ i + k − 1 个数中最大值是多少。
说明/提示
对于 100% 的数据保证:1 ≤ n ≤ 2 ∗ 1e6,1 ≤ k ≤ n
矩阵中元素大小不超过 1e4。
这道题我们很明显是没有办法暴力的(极限复杂度 O ( N 2 ) O(N^2) O(N2))
那么我们就要想办法优化,这时候就需要引入我们的单调队列
单调队列
我们需要维护一个队列让他保持单调性(递增或者递减)
形象的来说就是一些帅哥在比谁长得帅,每个人都有一个身高和颜值
首先进来的是xyc,他的身高是1m,颜值是 − ∞ -\infty −∞,但是因为队里是空的,所以我们还是让他入队
队列里变成
编号 | 姓名 | 身高 | 颜值 |
---|---|---|---|
1 | xyc | 1m | − ∞ -\infty −∞ |
后来又来了一个gjm,他的身高是1.1m,颜值是0,那么,xyc既比gjm矮,又没有gjm帅,所以xyc肯定不是这次“比帅大会”的冠军了,所以我们把他踢出队列
队列变成
编号 | 姓名 | 身高 | 颜值 |
---|---|---|---|
2 | gjm | 1.1m | 0 0 0 |
后来又来了一个ygl,ygl身高1.7m,颜值是 − 100 -100 −100
虽然ygl颜值比gjm要低,但是他比gjm高啊,海拔也可以体现帅,所以gjm仍然有希望,我们把ygl加入队列
编号 | 姓名 | 身高 | 颜值 |
---|---|---|---|
2 | gjm | 1.1m | 0 0 0 |
3 | ygl | 1.7m | − 100 -100 −100 |
最后来了一个ljr,ljr身高一米九,帅度 + ∞ +\infty +∞
这样他轻松吊打了[吊打了(吊打了集训队的xyc)的gjm],成为了这次比赛的冠军,gjm和ygl只能被踢出,因为他们身高和颜值都没有ljr高
编号 | 姓名 | 身高 | 颜值 |
---|---|---|---|
4 | ljr | 1.9m | + ∞ +\infty +∞ |
经过这个例子我们就知道了单调队列的思想,有两个参数 a i a_i a<