P1886 滑動視窗 單調佇列

2021-09-13 02:37:00 字數 1323 閱讀 4862

現在有一堆數字共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 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、維護隊首(對於上題就是如果隊首已經是當前元素的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個數 輸出格式 輸出...