單調佇列模板

2022-05-23 20:12:09 字數 642 閱讀 1573

單調佇列

適用於

需要快速求出區間最大/最小值的情況(常用於dp優化)

相關演算法

線段樹(單調佇列**量短,速度快,視題意選擇)

單調棧原理/思路

每次有元素進隊時,找到合適的隊尾接上,保證佇列單調性。(刪除後面不必要的一段)

同時,維護可用區間,及時去頭。

#includeusing

namespace

std;

int n,m,a[1000],q[1000],h,t,ans[1000

];int

main()

for(int i=1;i<=n-m+1;i++)printf("

%d--%d:%d\n

",i,i+m-1

,ans[i]);//列印區間最大值

}

輸入:10 4

9 2 1 4 3 6 5 0 8 7

輸出:1--4:9

2--5:4

3--6:6

4--7:6

5--8:6

6--9:8

7--10:8

單調佇列模板

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

模板 單調佇列

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

模板 單調佇列

現在有一堆數字共n個數字 n 10 6 以及乙個大小為k的視窗。現在這個從左邊開始向右滑動,每次滑動乙個單位,求出每次滑動後視窗中的最大值和最小值。例如 the array is 1 3 1 3 5 3 6 7 and k 3.輸入格式 輸入一共有兩行,第一行為n,k。第二行為n個數 輸出格式 輸出...