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 ...