時間限制: 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 usingview codenamespace
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
*/
一本通 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...