一、何為單調佇列?
1、首先搞懂,什麼是佇列
佇列是一種資料結構,兩個埠,乙個埠進元素,乙個埠出元素,那麼,根據這種操作的定義,不難發現:佇列具有「先進先出」的性質
2、單調佇列
單調佇列,顧名思義,具有的單調性的佇列,即佇列中的元素按照某種特徵有一定的順序。比如單調遞增的佇列,單調遞減的佇列。
3、舉個例子:單調遞增的佇列:
queue: 這就是乙個單調遞增的佇列
4、與普通佇列的不同:
它是一種雙向佇列:能夠在隊首和隊尾刪除元素,但是只能夠在隊尾插入元素,每次插入的時候,要是想節省時間的話,先和隊首元素比較,比如要維護的是單調遞增的佇列,那麼,當插入的元素大於隊首的時候,直接將整個佇列的所有元素刪除,將這個數加進去。再和隊尾元素比較,要是這個數小於隊尾元素,直接加進佇列中,要是比隊尾大,那麼就一次刪除隊尾元素,直到隊尾元素大於該數。
當然,很多時候不是維護的嚴格的單調遞增或者嚴格的單調遞減佇列,那麼這時候,在插入的時候稍稍改改判斷條件就行了。
二、單調佇列能用來幹嘛?
1、資料結構之一,做資料結構題目,就像 poj 2823 一樣,典型的單調佇列題
2、用於優化動態規劃,這是很常見的動態規劃優化方法
3、還有其他的,本弱逼暫時沒遇到這種題目
優先佇列(個人理解)
額。include 標頭檔案 priority queue que 格式 include includeusing namespace std int main for int i 0 i 10 i while que.empty return 0 輸出樣例 10 9 6 5 4 3 2 2 1 1...
單調棧,單調佇列的入門
我自己的話單調棧是也用陣列模擬出來的,我是根據這個部落格學的,原理挺簡單的,但是做題思想的轉變有點麻煩,最後陣列模擬的單調佇列其實是雙向佇列。下邊是大佬的部落格 單調佇列是什麼呢?可以直接從問題開始來展開。poj 2823 給定乙個數列,從左至右輸出每個長度為m的數列段內的最小數和最大數。數列長度 ...
1239 Easy的佇列 (單調佇列)
題目描述 easy的學生的 資料結構 考試掛掉了,他求著easy再給他一次機會,easy出了這麼一道題,如果他的學生做出來就給這個學生一次重新考試的機會,題目是這樣的 維護乙個名為佇列的資料結構,支援以下四種操作 enqueue x 將值為x的元素放入佇列的尾部 dequeue 輸出當前佇列首部的元...