洛谷p1886 滑動視窗

2021-09-25 21:54:14 字數 864 閱讀 7442

滑動視窗

單調佇列經典題,話說我第一次做這個題的時候是用線段樹水的

兩個單調佇列分別維護最小最大值,因為視窗有k的長度限制所以維護下標更方便

又由於是從左往右掃過去的,所以可以保證下標和值都是單調的

讀乙個維護乙個,以單增佇列為例,每讀入乙個元素就把前面比它大的都彈出,然後將元素入隊

因為視窗有k長,所以i>=k的時候再開始記錄答案,將已經在視窗外的元素(即i-元素下標》=k)從隊頭彈出佇列(這時候就體現出維護下標的作用了,維護元素的話就要再開乙個陣列記下標),做完之後隊頭元素就是最小值,記錄在ans1中

單減佇列同理

最後輸出兩個陣列就好了

#include#define maxn (1000000+5)

using namespace std;

inline int read()

while(isdigit(c))

return cnt*f;

}int q1[maxn],q2[maxn];//q1->max,q2->min

int n,k,a[maxn];

int l1,l2,r1,r2;

int ans_min[maxn],ans_max[maxn];

int main()

}for(register int i=1;i<=n-k+1;i++)printf("%d ",ans_min[i]);

printf("\n");

for(register int i=1;i<=n-k+1;i++)printf("%d ",ans_max[i]);

return 0;

}

洛谷 P1886 滑動視窗

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

洛谷P1886 滑動視窗

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

洛谷 P1886 滑動視窗

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