題目描述輸入格式
輸入一共有兩行,第一行為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個數 輸出格式 輸出...