关于单调队列的个人理解

一、何为单调队列?

    1、首先搞懂,什么是队列

       队列是一种数据结构,两个端口,一个端口进元素,一个端口出元素,那么,根据这种操作的定义,不难发现:队列具有“先进先出”的性质

    2、单调队列

       单调队列,顾名思义,具有的单调性的队列,即队列中的元素按照某种特征有一定的顺序。比如单调递增的队列,单调递减的队列。

    3、举个例子:单调递增的队列:

       queue:{ 1 2 3 4 5 6 7 10 12 23 45 56 67 90 } 这就是一个单调递增的队列

    4、与普通队列的不同:

       它是一种双向队列:能够在队首和队尾删除元素,但是只能够在队尾插入元素,每次插入的时候,要是想节省时间的话,先和队首元素比较,比如要维护的是单调递增的队列,那么,当插入的元素大于队首的时候,直接将整个队列的所有元素删除,将这个数加进去。再和队尾元素比较,要是这个数小于队尾元素,直接加进队列中,要是比队尾大,那么就一次删除队尾元素,直到队尾元素大于该数。

       当然,很多时候不是维护的严格的单调递增或者严格的单调递减队列,那么这时候,在插入的时候稍稍改改判断条件就行了。

二、单调队列能用来干嘛?

    1、数据结构之一,做数据结构题目,就像 POJ 2823 一样,典型的单调队列题

    2、用于优化动态规划,这是很常见的动态规划优化方法

    3、还有其他的,本弱逼暂时没遇到这种题目

你可能感兴趣的:(ACM_单调队列)