week5 D 滑動視窗滑動視窗

2021-10-04 13:19:28 字數 1140 閱讀 5329

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

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

window position

minimum value

maximum value

[1 3 -1] -3 5 3 6 7-13

1 [3 -1 -3] 5 3 6 7-33

1 3 [-1 -3 5] 3 6 7-35

1 3 -1 [-3 5 3] 6 7-35

1 3 -1 -3 [5 3 6] 736

1 3 -1 -3 5 [3 6 7]37

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

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

8 31 3 -1 -3 5 3 6 7

-1 -3 -3 -3 3 3

3 3 5 5 6 7

本題使用單調佇列進行解題,求視窗中的最小數時,使用單調遞減棧;求視窗中的最大數時,使用單調遞增棧。

以求視窗中的最小數為例。

使用for迴圈進行遍歷,對於小於隊尾的數,將佇列中所有比它大的數剔除,再將它加入其中,如果新加入的數和隊首的元素不在同乙個視窗中,將隊首彈出,直到在同乙個視窗。然後將隊首元素輸出。

求最大數與此類似。

#include

#include

#include

using

namespace std;

typedef

long

long ll;

ll a[

1000010

],q[

1000010

],ma[

1000010];

intmain()

cout << endl;

l =0, r =-1

;for

(ll j =

0; j < n; j++

)return0;

}

Week5 D 滑動視窗滑動視窗

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

WEEK 5 D 滑動視窗

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

Week5 D 滑動視窗

問題描述 zjm 有乙個長度為 n 的數列和乙個大小為 k 的視窗,視窗可以在數列上來回移動.現在 zjm 想知道在視窗從左往右滑的時候,每次視窗內數的最大值和最小值分別是多少.例如 數列是 1 3 1 3 5 3 6 7 其中 k 等於 3.解題思路 區域性最大最小可利用單調佇列,以單調遞增隊列為...