滑動視窗 Week5作業D題

2021-10-07 22:20:44 字數 1172 閱讀 9829

zjm 有乙個長度為 n 的數列和乙個大小為 k 的視窗, 視窗可以在數列上來回移動. 現在 zjm 想知道在視窗從左往右滑的時候,每次視窗內數的最大值和最小值分別是多少. 例如:

數列是 [1 3 -1 -3 5 3 6 7], 其中 k 等於 3.

輸入:輸入有兩行。第一行兩個整數n和k分別表示數列的長度和滑動視窗的大小,1<=k<=n<=1000000。第二行有n個整數表示zjm的數列。

輸出:輸出有兩行。第一行輸出滑動視窗在從左到右的每個位置時,滑動視窗中的最小值。第二行是最大值。

樣例:input:

8 3

1 3 -1 -3 5 3 6 7

output:

-1 -3 -3 -3 3 3

3 3 5 5 6 7

本題考查單調佇列。

要求查詢視窗內的最小值, 是乙個區域性的概念。

求最小值:維護乙個單調遞增佇列, 佇列中的元素均屬於當前視窗,當元素不屬於當前視窗時, 將隊首元素彈出即可。

求最大值同理。

當區間長度為1時,直接輸出。

#include

#include

#include

using

namespace std;

deque<

int> q;

int n,k;

int a[

1000050];

intmain()

else

if(i>=k) cout << a[q.

front()

]<<

" ";

} cout<

while

(!q.

empty()

) q.

pop_back()

;for

(int i=

1;i<=n;i++)if

(i>=k) cout << a[q.

front()

]<<

" ";}}

return0;

}

week5 作業D 滑動視窗

zjm 有乙個長度為 n 的數列和乙個大小為 k 的視窗,視窗可以在數列上來回移動.現在 zjm 想知道在視窗從左往右滑的時候,每次視窗內數的最大值和最小值分別是多少.例如 數列是 1 3 1 3 5 3 6 7 其中 k 等於 3.輸入有兩行。第一行兩個整數n和k分別表示數列的長度和滑動視窗的大小...

Week5 滑動視窗 單調佇列

題目內容 有乙個長度為 n 的數列和乙個大小為 k 的視窗,視窗可以在數列上來回移動.現在想知道在視窗從左往右滑的時候,每次視窗內數的最大值和最小值分別是多少.例如 數列是 1 3 1 3 5 3 6 7 其中 k 等於 3.輸入格式 輸入有兩行。第一行兩個整數n和k分別表示數列的長度和滑動視窗的大...

Week5 D 滑動視窗滑動視窗

week5 d 滑動視窗滑動視窗 zjm 有乙個長度為 n 的數列和乙個大小為 k 的視窗,視窗可以在數列上來回移動.現在 zjm 想知道在視窗從左往右滑的時候,每次視窗內數的最大值和最小值分別是多少.例如 數列是 1 3 1 3 5 3 6 7 其中 k 等於 3.window position ...