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

2021-10-02 10:47:58 字數 915 閱讀 3645

傳送門

難度普及/提高-

如題,單調佇列板子題。

單調佇列是乙個雙端佇列,頭和尾都可以出元素。

本文對單調佇列的實現進行簡述、模擬,方便理解,然後給出完整ac**

因為求最大值與求最小值的思路是基本相同的,所以以求最小值為例進行分析,即對void minqueue()進行分析。

int h = 0, t = -1;//隊首h,隊尾t
這就是對佇列進行模擬所採用的頭尾。當隊列為空時,總有h-t == 1成立。

此處給出乙個典型用例的模擬,看完就清楚了

典型用例模擬分析

6 3

1 3 -1 3 6 7

這個用例的特點是,index=2的元素-1比前面兩個都小,而index=2,3,4,5,的這四個元素呈現遞增。

典型用例模擬分析**(minqueue()執行過程)

第id步ih

tq1(初始化狀態)-0

-1{}20

0-1→031

00→142

01→0→-1→053

00→164

01→275

0→12→3

id = 4 那一行就是第二個while的效果

id = 7 那一行就是第乙個while的效果

#include#includeusing namespace std;

int a[1000005];//序列

int n, k;//序列長度n,視窗長度k

int q[1000005];//模擬佇列的陣列

void minqueue() }}

void maxqueue() }}

int main()

單調佇列 洛谷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個數 輸出格式 輸出...

洛谷P1886 滑動視窗 單調佇列

沒想到啊沒想到,時隔兩個月,我單調佇列又懵了 調了乙個小時,最後錯在快讀,啊!不過洛谷討論真好啊,感謝大佬!考前就不推新東西了,好好寫寫那些學過的東西 題目點這裡 我就不粘了自己點一下看吧 這題還有其他奇奇怪怪的做法,比如你可以當做rmq,用線段樹啊st表啊隨便你,不過單調佇列就可以了 單調佇列說到...