洛谷P1886 滑動視窗

2021-09-26 06:18:38 字數 1008 閱讀 2261

題目描述輸入格式

輸入一共有兩行,第一行為n,k。

第二行為n個數(輸出格式

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

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

輸入輸出樣例

輸入 #1

8 31 3 -1 -3 5 3 6 7

輸出 #1

-1 -3 -3 -3 3 3

3 3 5 5 6 7

說明/提示

50%的資料,n<=10^5

100%的資料,n<=10^6

單調佇列的題目

我們使用乙個佇列,在這個佇列中單調遞增。

這個佇列就是儲存每一次滑動的視窗包含的元素,如果對頭元素的下標不在視窗範圍了,則對頭指標+1直到在視窗範圍內。隊尾我們每進入乙個值就與隊尾元素進行比較,如果隊尾元素小於當前元素則滿足遞增性,否則則彈出隊尾元素,直至滿足遞增性。

最後輸出隊頭元素,隊頭元素就是當前這個區域內的最小值。

同樣相反我們如果做乙個單調遞減的佇列,按照之前的思路同樣可以找到這個區域內的最大值。

**:

#include

#include

using

namespace std;

int n,ans=

0,k,a[

20000001

],que[

200000005

],head=

1,tail=1;

intmain()

head=

1,tail=1;

printf

("\n");

que[1]

=1;for

(int i=

1;i<=n;i++

)printf

("\n");

return0;

}

洛谷 P1886 滑動視窗

洛谷 p1886 滑動視窗 單調佇列 單調遞增佇列 使得每個入隊元素都小於已有元素 保持遞增 遇到隊尾元素小於未入隊元素時,彈出隊尾再使未入隊元素入隊 資料結構 deque,因為滑動視窗需要判斷佇列元素是否過時,而deque可以通過pop front 彈出隊首元素 每次滑動都記錄隊首元素即可。inc...

洛谷p1886 滑動視窗

滑動視窗 單調佇列經典題,話說我第一次做這個題的時候是用線段樹水的 兩個單調佇列分別維護最小最大值,因為視窗有k的長度限制所以維護下標更方便 又由於是從左往右掃過去的,所以可以保證下標和值都是單調的 讀乙個維護乙個,以單增佇列為例,每讀入乙個元素就把前面比它大的都彈出,然後將元素入隊 因為視窗有k長...

洛谷 P1886 滑動視窗

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