用雙端佇列實現單調佇列

2021-07-24 05:22:33 字數 774 閱讀 3067

單調佇列是指:佇列中元素之間的關係具有單調性,而且,隊首和隊尾都可以進行出隊操作,只有隊尾可以進行入隊操作。

以單調不減隊列為例:佇列內的元素(e1,e2,e3...en)存在(e1<=e2<=e3<=...<=en)的關係,所以隊首元素e1一定是最小的元素。與優先佇列不同的是,當有乙個新的元素e入隊時,先要將隊尾的所有大於e的元素彈出,以保證單調性,再讓元素e入隊尾。

例如這樣一組數(1,3,2,1,5,6),進入單調不減佇列的過程如下:

1入隊,得到佇列(1);

3入隊,得到佇列(1,3);

2入隊,這時,隊尾的的元素3>2,將3從隊尾彈出,新的隊尾元素1<2,不用彈出,將2入隊,得到佇列(1,2);

1入隊,2>1,將2從隊尾彈出,得到佇列(1,1);

5入隊,得到佇列(1,1,5);

6入隊,得到佇列(1,1,5,6);

**實現

這個**是實現單調不遞減的佇列

#includeconst int n=1e6+10;

using namespace std;

int a[n];

int main()

num.push_back(a[1]);

int a1,a2;

for(i=2; i<=n; i++)

else if(!num.empty())}}

while(!num.empty())

printf("\n");

}return 0;

}

c 雙端佇列應用 單調佇列

一道經典題目 講到單調佇列必定會講的乙個題目 滑動視窗 講單調佇列前先來乙個需要用到的資料結構 雙端佇列 deque 也可以用陣列進行模擬 我們需要用到的函式有這些 因為我只學我要用到的0.0 建立 deque int que 隊列為空 que.empty 佇列清零 que.clear 隊尾元素 q...

演算法整理 複習 佇列 單調佇列 雙端佇列

這裡說一下,佇列中全部是元素從隊尾進 rear 隊頭出 head 左開右閉區間,即 rear 所指的位置是包含在佇列中的,head 所指的位置不在佇列中,所以 rear head 時隊列為空。我也分不太清應該是從隊尾進還是隊頭進比較合適,但是也不是什麼大問題,畢竟只是個變數名的問題,封裝好後並不會有...

用Python實現雙端佇列

雙端佇列 雙端佇列 deque,全名double ended queue 是 種具有佇列和棧的 性質的資料結構。雙端佇列中的元素可以從兩端彈出,其限定插 和刪除操作在表的兩端進 雙端佇列可以在佇列任意 端 隊和出隊。操作 實現 class deque object 雙端佇列 def init sel...