題目描述
乙個含有n項的數列(n<=2000000),求出每一項前的m個數到它這個區間內的最小值。若前面的數不足m項則從第1個數開始,若前面沒有數則輸出0。
輸入輸出格式
輸入格式:
第一行兩個數n,m。
第二行,n個正整數,為所給定的數列。
輸出格式:
n行,第i行的乙個數ai,為所求序列中第i個數前m個數的最小值。
輸入樣例#1:
6 2
7 8 1 4 3 2
輸出樣例#1:077
113
說明
【資料規模】
m≤n≤2000000,ai ≤3×10 ^7
單調佇列
#include
using
namespace std;
char buf[
1<<17]
,*l=buf,
*r=buf;
#define gc() l==r&&(r=(l=buf)+fread(buf,1,1<<17,stdin),l==r)?eof:*l++;
template
<
typename t>
inline
void
read
(t&x)
const
int maxn=
1e5+10;
int n,m,ans[maxn]
;struct nodex;
dequeque;
intmain()
for(
int i=
0;i++i)
return0;
}
洛谷 P1440 求m區間內的最小值 單調佇列
顯然是一道單調佇列題目 對於單調佇列不明白的請看這一篇部落格 這道題和模板唯一的不同點就是從0開始,一直輸出n次。什麼意思呢?詳細點說,就是輸出0到0,0到1,0到2 一直到0到m 1,接著是1到m,2到m 1,3到m 2 一直到n m到n 1的最小值。具體可以研究一下樣例,很容易就可以理解。所以我...
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...