caioj 1172 單調佇列(過渡題)

2021-08-28 09:00:47 字數 977 閱讀 1386

題目【題意】

給定乙個n個數的數列,從左至右輸出每個長度為m的數列段內的最大數。

比如8個數的數列[1 3 -1 -3 5 3 6 7],m=3,那麼每連續3個最大值如下:

位置

最大值

[1  3  -1] -3  5  3  6  7  3

1 [3  -1  -3] 5  3  6  7  3

1  3 [-1  -3  5] 3  6  7  5

1  3  -1 [-3  5  3] 6  7  5

1  3  -1  -3 [5  3  6] 7  6

1  3  -1  -3  5 [3  6  7] 7

【輸入格式】

第一行兩個整數n和m( 1<= n <= 20 0000,m<=n)。

下來給出n個整數。

【輸出格式】

一行乙個整數,表示每連續m個數的最大值。

【樣例輸入】

8 31 3 -1 -3 5 3 6 7

【樣例輸出】33

5567

思路:這道題絕對是單調佇列裡面最簡單的一道題,只是過渡題,還不算是難的,單調佇列和棧有點像,然後我也不說太多了因為這個在**中寫的超級詳細了

/*單調佇列和棧有點像,但是棧是先進後出;單調佇列是先進先出

同時,單調佇列是成遞減的佇列的,就是第乙個也就是隊頭是最大的

隊尾是最小的,然後無數次刪減之後的佇列就是要輸出的答案

*/#include#include#includeusing namespace std;

struct node

list[210000];//記錄當前這個數及前面的值和位置

int a[210000];//儲存當前這個數

int n,m;

int main()

return 0;

}

單調棧,單調佇列

大多數借鑑了 單調佇列是什麼呢?可以直接從問題開始來展開。poj 2823 給定乙個數列,從左至右輸出每個長度為m的數列段內的最小數和最大數。數列長度 n 106,m n 我們知道,解法 在暴力列舉的過程中,有乙個地方是重複比較了,就是在找當前的f i 的時候,i的前面其它m 1個數在算f i 1 ...

單調棧 單調佇列

單調棧 單調佇列是在棧和佇列的基礎上加上單調結構的資料結構。如果乙個元素入棧或入隊,他會檢查之前的元素,如果之前的元素不可能是答案的解,那麼就彈出元素,使得當前元素入棧或入隊。leetcode 239 滑動視窗最大值 此題是單調佇列,每次遇到乙個元素,一直從隊尾彈出,直到隊尾元素大於該元素為止。還需...

單調棧 單調佇列

啊學完了來寫個總結吧 顧名思義,單調,就是指色彩單一某乙個容器裡面的元素都是遞增或遞減的,而單調棧和單調佇列就是這個容器。單調棧 單調棧模板 其他的我就不說了,講下為什麼單調棧是從後往前掃瞄 當我們在判斷乙個數後面第乙個比它大的數時,前提是後面的數已經被處理了,所以我們要從後往前掃瞄。我做了兩種做法...