单调队列

来源:互联网 发布:阿尔法拆单软件 编辑:程序博客网 时间:2024/05/16 06:34

单调队列是指队列中的元素按照严格单调递增或者单调递减的顺序。有两个性质(以单调递增队列为例):

1、从队头到队尾的元素是按照严格单调递增的,如(1,2,3,4,5)。

2、越靠近队头的元素越先入队

单调队列可以从两端进行操作(以单调递增队列为例):

入队:如果当前元素是e,从队尾开始检查,删除大于等于e的队尾元素,直到队尾元素小于e或者队列为空,然后将e插入队尾。如果队列大小有限制,则在入队之前检查队列大小,如果空间不够,则从队首弹出元素。

出队:直接从队首取元素,即最小值。

以下是一个单调递增队列的例子:

队列大小不能超过3,入队元素依次为3,2,8,4,5,7,6,4

3入队:(3)

3从队尾出队,2入队:(2)

8入队:(2,8)

8从队尾出队,4入队:(2,4)

5入队:(2,4,5)

2从队头出队,7入队:(4,5,7)

7从队尾出队,6入队:(4,5,6)

6从队尾出队,5从队尾出队,4从队尾出队,4入队:(4)

以上左端为队头,右端为队尾。从队尾出队是为了符合性质2,从队头出队是为了符合队列的大小限制。


单调队列可以用来优化dp,将O(n)的复杂度降到O(1)。


本文参考:点击打开链接(http://blog.csdn.net/alongela/article/details/8227590


0 0