单调队列到底是什么呢?
简单地按照字面意思来说,单调队列是一种队列(踢飞)
但是这种队列和普通的队列有着很大的区别,怎么说呢:
它的队首和普通的队列一样,只能删除元素。
而它的队尾既可以添加元素也可以删除元素。
通常来说也可以叫做输入受限的双端队列(栈)。
单调队列是做什么用的呢?
简单来说就是用来维护一段区间内的单调上升/下降性质,导出性质就是也可以用来维护一个区间内的最值。
我们先来看一道例题:poj 2823
题目大意
给你n个数字和一个长度k,让你从前到后输出每个长度为k的区间内的最小值/最大值。
思路
1.暴力
从前到后每个区间遍历一遍,复杂度是O(n*k),铁定超时了
2.线段树维护区间最值
n的范围是10^6,线段树需要4*10^6的空间貌似不会爆,时间复杂度是O(nlogn),可以接受
但是对这道题而言,单调队列显然是优于线段树的另一种思路,先来了解一下它的
工作原理
假设现在我们维护一个