模板單調佇列

2022-08-17 16:48:25 字數 631 閱讀 1883

單調佇列

有乙個長為 nn的序列 a,以及乙個大小為 k的視窗。現在這個從左邊開始向右滑動,每次滑動乙個單位,求出每次滑動後視窗中的最大值和最小值。

例如:the array is [1,3,-1,-3,5,3,6,7][1,3,−1,−3,5,3,6,7], and k = 3k=3。

輸入一共有兩行,第一行有兩個正整數 n,k。 第二行 nn個整數,表示序列 a

輸出共兩行,第一行為每次視窗滑動的最小值

第二行為每次視窗滑動的最大值

#include

using namespace std;

int n,k,i,head,tail;

const int size=1000005;

long long a[size];

long long sum[size];

long long q[size];

long long fmax[size];

long long fmin[size];

void get()

}void max()

}int main()

單調佇列模板

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

模板 單調佇列

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

單調佇列模板

單調佇列 適用於 需要快速求出區間最大 最小值的情況 常用於dp優化 相關演算法 線段樹 單調佇列 量短,速度快,視題意選擇 單調棧原理 思路 每次有元素進隊時,找到合適的隊尾接上,保證佇列單調性。刪除後面不必要的一段 同時,維護可用區間,及時去頭。includeusing namespace st...