滑動視窗
單調佇列經典題,話說我第一次做這個題的時候是用線段樹水的
兩個單調佇列分別維護最小最大值,因為視窗有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個數 輸出格式 輸出...