模擬試題 滑動視窗 BSOI2604

2021-07-27 17:29:59 字數 1014 閱讀 5067

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

你的任務是找出窗體在各位置時的最大值和最小值。

第1行:2個整數n,k(k<=n<=1000000) 

第2行:n個整數,表示陣列的n個元素(<=2*10^9) 

第1行:滑動視窗從左向右移動每個位置的最小值,每個數之間用乙個空格分開 

第2行:滑動視窗從左向右移動每個位置的最大值,每個數之間用乙個空格分開

8 31 3 -1 -3 5 3 6 7

-1 -3 -3 -3 3 3

3 3 5 5 6 7

單調佇列模板。

維護乙個長度為k的單調佇列,每次用隊首來的出最大和最小值,新加入的數就放在隊尾。

如果隊首的距離大於k,則head++,即隊首出隊。若新來的數值比隊尾更優,則tail--,即隊尾出隊。

#include#includeusing namespace std;

int n,k,a[1000005];

struct queueq[1000005];

inline int read()

void work(bool f)

for(i=k; i<=n; i++) {

if(f)while(a[i]=head)tail--;

else while(a[i]>q[tail].val&&head<=tail)tail--;

q[++tail].val=a[i];q[tail].pos=i;

while(q[head].pos+k<=i&&head<=tail)head++;

cout<

(筆試題)滑動視窗的最大值

給定乙個陣列和滑動視窗的大小,找出所有滑動視窗裡數值的最大值。例如,如果輸入陣列及滑動視窗的大小3,那麼一共存在6個滑動視窗,他們的最大值分別為 針對陣列的滑動視窗有以下6個 假設視窗大小為w,遍歷陣列,從陣列第w 1位開始,每次移動一位,並計算視窗w的最大值。時間複雜度 計算視窗的最大值需o w ...

TCP面試題之滑動視窗原理

作用 1.提供tcp可靠性 對傳送的資料進行確認 2.流量控制 視窗大小隨鏈路變化 一 tcp視窗機制 tcp中視窗大小是指tcp協議一次傳輸多少個資料。因為tcp是乙個面向連線的可靠的傳輸協議,既然是可靠的就需要傳輸的資料進行確認。tcp視窗機制有兩種,一種是固定視窗大小,另一種是滑動視窗。資料在...

劍指offer 面試題59 1 滑動視窗的最大值

給定乙個陣列和滑動視窗的大小,找出所有滑動視窗裡數值的最大值。例如,如果輸入陣列及滑動視窗的大小3,那麼一共存在6個滑動視窗,他們的最大值分別為 針對陣列的滑動視窗有以下6個 掃瞄每個滑動視窗的所有數字並找出其中的最大值。如果滑動視窗的大小為k,則需要o k 時間找到最大值。對於長度為 n 的輸入陣...