洛谷 1886 滑動視窗 單調佇列

2021-09-10 14:48:26 字數 629 閱讀 5696

單調佇列,就是字面意思。

如何維護? (假設我們是單調減的佇列)

維護時,保證所有元素最多進隊一次出隊一次,複雜度o(n)

我們在隊頭放最大的元素,向右依次遞減。

在隊尾插入新元素時,檢查新元素是否比隊尾元素大:是,則刪除隊尾元素,直到 比隊尾元素小時,插入新元素在隊尾。

同時還要檢查一下,是否還在視窗範圍內

#includeusing namespace std;

const int maxn=1e6+5;

typedef pairp;

p single_q[maxn];

int head=1,tail=0;

int n,m,a[maxn];//題目資料

void push_singlequeue2(p now)//單調佇列(減)

void push_singlequeue(p now)//單調佇列(增)

int main()

puts("");

head=1,tail=0;

for(int i=1;i<=n;i++)

push_singlequeue2(p(i,a[i]));

puts("");

}

洛谷1886 滑動視窗 模板 單調佇列

1886 題目描述 有乙個長為 nn 的序列 aa,以及乙個大小為 kk 的視窗。現在這個從左邊開始向右滑動,每次滑動乙個單位,求出每次滑動後視窗中的最大值和最小值。例如 the array is 1,3,1,3,5,3,6,7 and k 3。輸入格式 輸入一共有兩行,第一行有兩個正整數 n,kn...

單調佇列 洛谷P1886 滑動視窗

題目鏈結 dalao題解 題目給乙個長度為n的序列,然後給乙個值k,要求出長度為k的視窗在數列滑動過程中的最大值和最小值 圖示如下 比如給乙個長度為n 8的序列為 1 3 1 3 5 3 6 7 視窗長度是k 3 那麼視窗滑動中的 最小值就是 1 3 3 3 3 3 最大值就是 3 3 5 5 6 ...

洛谷 P1886 滑動視窗 單調佇列

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