佇列 單調佇列 滑動視窗

2021-10-09 23:47:15 字數 1181 閱讀 9905

總時間限制: 12000ms

記憶體限制: 65536kb

描述給定乙個長度為n(n<=10^6)的陣列。有乙個大小為k的滑動視窗從陣列的最左端移動到最右端。你可以看到視窗中的k個數字。視窗每次向右滑動乙個數字的距離。

下面是乙個例子:

陣列是 [1 3 -1 -3 5 3 6 7], k = 3。

視窗位置

最小值最大值

[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] 7 36

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

你的任務是得到滑動視窗在每個位置時的最大值和最小值。

輸入輸入包括兩行。

第一行包括n和k,分別表示陣列的長度和視窗的大小。

第二行包括n個數字。

輸出輸出包括兩行。

第一行包括視窗從左至右移動的每個位置的最小值。

第二行包括視窗從左至右移動的每個位置的最大值。

樣例輸入

8 3

1 3 -1 -3 5 3 6 7

樣例輸出

-1 -3 -3 -3 3 3

3 3 5 5 6 7

#include #include #include #include #include using namespace std;

const int maxn = 1e6;

int n, k;

int a[maxn+5];

int main()

for (int i = k-1; i < n; ++i)

printf("\n");

/* max */

q.clear();

for (int i = 0; i < k-1; ++i)

for (int i = k-1; i < n; ++i)

printf("\n");

system("pause");

return 0;

}

【分析】

單調佇列問題,十分巧妙

可以看看這篇題解

單調佇列 滑動視窗 模板 單調佇列

有乙個長為 n 的序列 a,以及乙個大小為 k 的視窗。現在這個從左邊開始向右滑動,每次滑動乙個單位,求出每次滑動後視窗中的最大值和最小值。the array is 1,3,1,3,5,3,6,7 and k 3。輸入一共有兩行,第一行有兩個正整數 n,k。第二行 n 個整數,表示序列 a 輸出共兩...

單調佇列 滑動視窗

nkoj 2152 description 給你乙個長度為n n 10 6 的陣列,乙個長為k的滑動的窗體從最左移至最右端,你只能見到視窗的k個數,每次窗體向右移動一位,找出窗體所包含的數字的最大和最小值,如下表所示 k的值為3 視窗位置 最小值 最大值 1 3 1 3 5 3 6 7 1 3 1 ...

滑動視窗 單調佇列

給定乙個大小為n 106的陣列。有乙個大小為k的滑動視窗,它從陣列的最左邊移動到最右邊。您只能在視窗中看到k個數字。每次滑動視窗向右移動乙個位置。以下是乙個例子 該陣列為 1 3 1 3 5 3 6 7 k為3。視窗位置 最小值 最大值 1 3 1 3 5 3 6 7 1 3 1 3 1 3 5 3...