在做P1725琪露诺的时候,看出来要单调队列优化,但是忘记了,在这里简记一下板子。
时间复杂度可求长度固定区间内值的最大或最小值。
for(int i = 1; i <= n; i ++){
if(hh <= tt && i - q[hh] + 1 > len)hh ++;
while(hh <= tt && a[i] <= a[q[tt]])
tt --;
q[++tt] = i;
if(i >= len)printf("%d ", a[q[hh]]);
}
需要注意的是,队列终所存数是对应数字在实际数组中的下标