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

2021-10-10 07:12:33 字數 1447 閱讀 8852

這裡說一下,佇列中全部是元素從隊尾進(rear)、隊頭出(head),左開右閉區間,即 rear 所指的位置是包含在佇列中的,head 所指的位置不在佇列中,所以 rear == head 時隊列為空。

我也分不太清應該是從隊尾進還是隊頭進比較合適,但是也不是什麼大問題,畢竟只是個變數名的問題,封裝好後並不會有任何影響。但是有知道的大佬還是請告訴我到底應該是從隊頭進還是隊尾進,我好糾結。。。

struct queue

bool

empty()

void

push

(int a)

intpop()

};

p1886 滑動視窗 /【模板】單調佇列

#include

#include

#include

using

namespace std;

#define maxn 1000005

int n,k;

int a[maxn]

;struct queue

void

push_min

(int w,

int x)

void

push_max

(int w,

int x)

void

pop(

int x)

intfront()

}que;

intmain

(void

) que.

initialize()

;for

(int i=

1;i<=n;i++

) cout << endl;

que.

initialize()

;for

(int i=

1;i<=n;i++

)return0;

}

struct queue

bool

empty()

void

push_front

(int a)

void

push_back

(int a)

intpop_front()

intpop_back()

intsize()

};

因為我想讓佇列從 1 開始,所以統一用了% maxn + 1的方法。

struct cqueue

bool

empty()

void

push

(int a)

intpop()

};

返回

用雙端佇列實現單調佇列

單調佇列是指 佇列中元素之間的關係具有單調性,而且,隊首和隊尾都可以進行出隊操作,只有隊尾可以進行入隊操作。以單調不減隊列為例 佇列內的元素 e1,e2,e3.en 存在 e1 e2 e3 en 的關係,所以隊首元素e1一定是最小的元素。與優先佇列不同的是,當有乙個新的元素e入隊時,先要將隊尾的所有...

c 雙端佇列應用 單調佇列

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

HDU 6319 單調佇列 雙端佇列

原題 題意 乙個數列,1e7數量。對每個區間 i,i m 1 都有操作。操作要查詢該區間的最大值和該區間的最長的嚴格上公升的序列的長度。正這不好計算,倒著來比較好。用雙端的單調佇列維護資訊。倒著來的話,就把要加進來的數和隊尾比較,大於等於隊尾的話,說明隊尾那個數沒用了。隊頭就是區間的最大值,佇列長度...