乙個含有n項的數列(n<=2000000),求出每一項前的m個數到它這個區間內的最小值。若前面的數不足m項則從第1個數開始,若前面沒有數則輸出0。
第一行兩個數n,m。
第二行,n個正整數,為所給定的數列。
n行,第i行的乙個數ai,為所求序列中第i個數前m個數的最小值。
6 27 8 1 4 3 207
7113
m ≤n
≤2000000
m≤n≤2000000
m≤n≤20
00000ai
≤3×1
07
a_i\leq 3\times 10^7
ai≤3×
107單調佇列過一遍就出來了,
開乙個雙端佇列
對於每乙個數存下其下表,從1開始掃,
每次把數放到隊尾,同時如果隊尾比當前值大就讓隊尾出隊,直到小於等於當前數,
這樣從隊頭開始掃的時候數字下標和數值都是是遞增的。
然後我們對於下標大於i-m+1令其出隊
最後的隊頭就是當前下標時的答案
#include
#define ll long long
#define maxn 5000100
#define n 1001
#define inf 0x3f3f3f3f
#define gtc() getchar()
using
namespace std;
template
<
class
t>
inline
void
read
(t &s)
while
(isdigit
(ch)
) s *
= w;
}template
<
class
t>
inline
void
write
(t x)
int n, m;
struct nodea[maxn]
;deque q;
int qu[maxn]
;int
main()
qu[1]
=0;for
(int i =
1; i < n;
++i)
for(
int i =
0; i < n;
++i)
return0;
}
P1440 求M區間內的最小值
乙個含有 nn 項的數列,求出每一項前的 mm 個數到它這個區間內的最小值。若前面的數不足 mm 項則從第 11 個數開始,若前面沒有數則輸出 00。第一行兩個整數,分別表示 nn,mm。第二行,nn 個正整數,為所給定的數列 a ia i nn 行,每行乙個整數,第 ii 個數為序列中 a ia ...
P1440 求m區間內的最小值
乙個含有n項的數列 n 2000000 求出每一項前的m個數到它這個區間內的最小值。若前面的數不足m項則從第1個數開始,若前面沒有數則輸出0。輸入格式 第一行兩個數n,m。第二行,n個正整數,為所給定的數列。輸出格式 n行,第i行的乙個數ai,為所求序列中第i個數前m個數的最小值。輸入樣例1 627...
luogu P1440 求m區間內的最小值
乙個含有n項的數列 n 2000000 求出每一項前的m個數到它這個區間內的最小值。若前面的數不足m項則從第1個數開始,若前面沒有數則輸出0。輸入格式 第一行兩個數n,m。第二行,n個正整數,為所給定的數列。輸出格式 n行,第i行的乙個數ai,為所求序列中第i個數前m個數的最小值。輸入樣例 1 6 ...