單調佇列模板 例題

2021-10-09 23:01:33 字數 867 閱讀 1737

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

單調佇列顧名思義就是乙個有規律的佇列,這個佇列的規律是:所有在佇列裡的數都必須按遞增(或遞減)的順序列隊。

例如:

有如下一串數字:1 5 3 4 2

首先第乙個數字1先進佇列,que = ;

之後第二個數字5大於1,則1出佇列5進佇列,que = ;

下一步第三個數字3小於5,進佇列,que = ;

下一步第四個數字4大於3,則3出佇列4進佇列,que = ;

下一步第五個數字2小於4,進佇列,que = ;

這樣最後佇列裡的數字為單調遞減排列。

//que陣列儲存資料在a陣列中的下標

que[

++tail]=1

;//第乙個資料先進入佇列

for(

int i =

2; i <= n; i++

)

洛谷2032掃瞄

#include

#define maxn 2000001

int head =

1, tail =0;

int a[maxn]

, que[maxn]

;int

main()

//單調佇列遞減,則隊頭為最大元素

que[

++tail]=1

;for

(int i =

2; i <= n; i++

)return0;

}

單調佇列和單調棧例題

1 單調佇列 給出乙個長度為n的序列和區間長度k 從左向右對每乙個長度為k的區間詢問最大值和最小值。思路 對於最小值,考慮維護乙個遞增的雙端佇列,每次入隊時將隊尾比當前入隊元素的全部刪除,每次取隊首並且判斷是否在當前區間內即可 author hairu,wu from ahut include in...

單調佇列模板

單調佇列 我們從最簡單的問題開始 eg.現在有乙個數列,假設它有n項,問題是 求出每個區間長度為k的連續區間內數列的最大值。數學表示式 f i max,i 0,1,n 1。解法一 很直觀的一種解法,那就是從數列的開頭,將窗放上去,然後找到這最開始的k個數的最大值,然後窗最後移乙個單元,繼續找到k個數...

模板 單調佇列

單調佇列 詳細介紹新增鏈結描述 其實就是維護乙個嚴格單調的佇列 或棧 保證這個佇列是單調的且佇列中的元素的順序和和之前的前後順序保持一致 維護的時候 如果新的元素比隊尾的元素小 假如是單調增佇列 那麼一直pop,直到新的元素比隊尾元素大 直接加入隊尾 或者和隊尾元素相等 不用操作,因為該元素已經在佇...