一本通1597 例 1 滑動視窗

2022-05-08 02:00:08 字數 1688 閱讀 1683

時間限制: 1000 ms         記憶體限制: 524288 kb

題目描述

原題來自:poj 2823

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

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

輸入格式

第 1 行:兩個整數 n 和 k;

第 2 行:n 個整數,表示陣列的 n 個元素(≤2×109

);輸出格式

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

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

樣例樣例輸入

8 3

1 3 -1 -3 5 3 6 7

樣例輸出

-1 -3 -3 -3 3 3

3 3 5 5 6 7

資料範圍與提示

對於 20% 的資料,k≤n≤1000;

對於 50% 的資料,k≤n≤105

;對於 100% 的資料,k≤n≤106

。sol:單調佇列模板

#include using

namespace

std;

typedef

intll;

inline ll read()

while

(isdigit(ch))

return (f)?(-s):(s);

}#define r(x) x=read()inline

void

write(ll x)

if(x<10

)

write(x/10

); putchar((x%10)+'0'

);

return;}

inline

void

writeln(ll x)

#define w(x) write(x),putchar(' ')

#define wl(x) writeln(x)

const

int n=1000005

;int

n,m,a[n];

struct

record

ddq[n];

intmain()

; }

for(i=m;i<=n;i++)

;while(head1) head++;

w(ddq[head].shuz);

}putchar('\n

');head=1; tail=0

;

for(i=1;i);}

for(i=m;i<=n;i++)

;while(head1) head++;

w(ddq[head].shuz);

}return0;

}/*input

8 31 3 -1 -3 5 3 6 7

output

-1 -3 -3 -3 3 3

3 3 5 5 6 7

*/

view code

一本通 1 1 例 1 活動安排

題目link 貪心即可,將活動按右端點排序,排序後能選則選。o n 證明 首先對於乙個前面都為最優序列的前提下,如果對於乙個活動 a 使它發生是一種最優序列,然後再對於另乙個活動 b 它的結束時間比 a 早,並且開始時間也滿足條件,那麼根據貪心就可以選它,因為它既合法又是一種最優序列。1 inclu...

一本通1486 例題1 黑暗城堡

知道黑暗城堡有 n 個房間,m 條可以製造的雙向通道,以及每條通道的長度。城堡是樹形的並且滿足下面的條件 設 d i 為如果所有的通道都被修建,第 i 號房間與第 1 號房間的最短路徑長度 而 s i 為實際修建的樹形城堡中第 i 號房間與第 1 號房間的路徑長度 要求對於所有整數 i 1 i n ...

佇列(一本通)

這道題重點是關係的轉換和初始化 include include include includeusing namespace std int a 101 記錄接著的的那個節點 int n,m int main int ans void bfs int x,int y int main cout in...