CODEVS4373 視窗(單調佇列)

2021-08-22 08:51:45 字數 1323 閱讀 4464

題目鏈結

時間限制: 1 s

空間限制: 256000 kb

題目等級 : ** gold

題解題目描述 description

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

window positionmin value

max 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

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

輸入描述 input description

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

輸出描述 output description

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

第2行每個位置的max value

樣例輸入 sample input

8 31 3 -1 -3 5 3 6 7

樣例輸出 sample output

-1 -3 -3 -3 3 3

3  3  5  5  6 7

資料範圍及提示 data size & hint

資料範圍:20%: n<=500; 50%: n<=100000;100%: n<=1000000;

解題思路:

利用單調佇列來維護區間的最小值和最大值,q1維護的是最小值的單調佇列,q2維護的是最大值的單調佇列,這裡需要先讓k個元素先進佇列,然後輸出n-k個最小值與最大值。

**:

#includeusing namespace std;

int a[1000005],q1[1000005],q2[1000005],min[1000005],max[1000005];

int main()

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

min[n1++]=a[q1[head1]];

max[n2++]=a[q2[head2]];

printf("%d",min[0]);

for(int i=1;iprintf("\n");

printf("%d",max[0]);

for(int i=1;iprintf("\n");

return 0;

}

vim 單視窗 多視窗

可以在乙個視窗裡多次開啟同乙個檔案,也可以在乙個視窗裡開啟不同檔案。功能鍵描述 r filename 在游標後顯示filename檔案內容 n編輯下乙個檔案 n編輯上乙個檔案 files 列出目前vim開啟的所有檔案 w filename 另存為功能鍵 描述 sp filename 開啟乙個新視窗。...

關於單視窗登入

今天在公司發現了一種實現單視窗的解決方案,在些將它寫出來.以備以後使用.這裡說的單視窗,我不知道算不算是一種單點登入.也不想去深究,反正我又不是搞理論的,能用,切能用對就ok.管浪多也沒用.是不.呵呵 實現原理很簡單,只是想到的人不多吧.在說之前,先說說要用到那些東西 1.標識物件,這是必須的,要不...

WPF 單例視窗

首先在主窗體中將選單關聯的窗體例項化。第二步 將每個選單對應窗體的closing事件重寫。之所以要重寫closing事件,是因為在選單對應的視窗關閉之後,再次開啟就會報錯 第三步 在主窗體中選單事件裡面進行判斷處理 示例 public partial class main window 事件呼叫 p...