現在有一堆數字共n個數字(n<=10^6),以及乙個大小為k的視窗。現在這個從左邊開始向右滑動,每次滑動乙個單位,求出每次滑動後視窗中的最大值和最小值。
例如:the array is [1 3 -1 -3 5 3 6 7], and k = 3.
輸入格式:
輸入一共有兩行,第一行為n,k。
第二行為n個數(輸出格式:
輸出共兩行,第一行為每次視窗滑動的最小值
第二行為每次視窗滑動的最大值
輸入樣例#1:複製
8 3輸出樣例#1:複製1 3 -1 -3 5 3 6 7
-1 -3 -3 -3 3 350%的資料,n<=10^53 3 5 5 6 7
100%的資料,n<=10^6
單調佇列實現的大致過程:
1、維護隊首(對於上題就是如果隊首已經是當前元素的m個之前,則隊首就應該被刪了,head++)
2、在隊尾插入(每插入乙個就要從隊尾開始往前去除冗雜狀態,保持單調性)
單調佇列模板:
#include#include#include#includeusing namespace std;
struct node
v[1010000]; //x表示值,y表示位置 可以理解為下標
int a[1010000],n,m,mx[1010000],mn[1010000];
void getmin()
for(;i<=n;i++)
op[maxn];
int a[maxn] , mn[maxn] , mx[maxn] , n , m;
void getmax()
for(; i <= n ; i++) }
void getmin()
for(; i <= n ; i++) }
int main()
getmax();
getmin();
for(int i = 1 ; i <= n-m+1 ; i++)
printf("\n");
for(int i = 1 ; i <= n-m+1 ; i++)
printf("\n");
return 0;
}
單調佇列 P1886 滑動視窗
get 單調佇列 現在有一堆數字共n個數字 n 10 6 以及乙個大小為k的視窗。現在這個從左邊開始向右滑動,每次滑動乙個單位,求出每次滑動後視窗中的最大值和最小值。例如 the array is 1 3 1 3 5 3 6 7 and k 3.輸入格式 輸入一共有兩行,第一行為n,k。第二行為n個...
單調佇列 洛谷P1886 滑動視窗
題目鏈結 dalao題解 題目給乙個長度為n的序列,然後給乙個值k,要求出長度為k的視窗在數列滑動過程中的最大值和最小值 圖示如下 比如給乙個長度為n 8的序列為 1 3 1 3 5 3 6 7 視窗長度是k 3 那麼視窗滑動中的 最小值就是 1 3 3 3 3 3 最大值就是 3 3 5 5 6 ...
洛谷 P1886 滑動視窗 單調佇列
現在有一堆數字共n個數字 n 10 6 以及乙個大小為k的視窗。現在這個從左邊開始向右滑動,每次滑動乙個單位,求出每次滑動後視窗中的最大值和最小值。例如 the array is 1 3 1 3 5 3 6 7 and k 3.輸入格式 輸入一共有兩行,第一行為n,k。第二行為n個數 輸出格式 輸出...