--------------------------
题目链接:Miku
--------------------------
看一看这道题,我们很容易会发现采用模拟+遍历的方法会TLE
这时,我们就要采用这样一个东西了——单调队列(其实这也就是个单调队列模板)
---------------------------
单调队列,顾名思义,我们在使用时这个队列是有一定顺序(单调)的,并且它有一个特点,你的队列的极值一定在队首,知道这些,我们接可以做题了
---------------------------
单调队列是从队尾插入,而队首,队尾都会删除的双端队列。以该题为例,我们首先需要一个降序的单调队列,但是怎么实现呢?
假设此时队列为1,2,6,我们我们要插入一个4,显而易见,只要我们把4插进去,6就不可能是最小值了(反之就有可能),所以为了维护队列单调性,我们需要把6删除
while(!q1.empty()&&q1.back()>=now)//注意,一定要把判断是否为空放在前面 { q1.pop_back(); q2.pop_back();//弹出 }