視窗(單調佇列)

2021-07-23 18:24:38 字數 1080 閱讀 1331

題目描述:

給你乙個長度為n的陣列,乙個長為k的滑動的窗體從最左移至最右端,你只能見到視窗的k個數,每次窗體向右移動一位,如下表:

window position min value

max value

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

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

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

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

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

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

你的任務是找出視窗在各位置時的max value, min value.

輸入描述:

第1行n,k,第2行為長度為n的陣列

輸出描述:

2行 第1行每個位置的min value

第2行每個位置的max value

樣例輸入:

8 3

1 3 -1 -3 5 3 6 7

樣例輸出:

20%:n<=500;

50%: n<=100000;

100%: n<=1000000;

思路:

典型的單調佇列

注意:開兩個佇列,乙個維護最大值,另乙個維護最小值,分別求出答案

千萬不要圖省事,用乙個佇列的頭元素和尾元素來維護最大和最小,根據單調佇列的性質,這樣做是不正確的!

#include

using namespace std;

const int maxn=1000010;

int n,m,a[maxn],q[maxn];

void find_min()

coutfor(int i=1;i<=n;i++)

}int main()

視窗(單調佇列)

題目描述 給你乙個長度為n的陣列,乙個長為k的滑動的窗體從最左移至最右端,你只能見到視窗的k個數,每次窗體向右移動一位,如下表 window position min value max value 1 3 1 3 5 3 6 7 1 3 1 3 1 3 5 3 6 7 3 3 1 3 1 3 5 ...

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

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

佇列 單調佇列 滑動視窗

總時間限制 12000ms 記憶體限制 65536kb 描述給定乙個長度為n n 10 6 的陣列。有乙個大小為k的滑動視窗從陣列的最左端移動到最右端。你可以看到視窗中的k個數字。視窗每次向右滑動乙個數字的距離。下面是乙個例子 陣列是 1 3 1 3 5 3 6 7 k 3。視窗位置 最小值最大值 ...