乙個含有n項的數列(n<=2000000),求出每一項前的m個數到它這個區間內的最小值。若前面的數不足m項則從第1個數開始,若前面沒有數則輸出0。
輸入格式:
第一行兩個數n,m。
第二行,n個正整數,為所給定的數列。
輸出格式:
n行,第i行的乙個數ai,為所求序列中第i個數前m個數的最小值。
輸入樣例#1:
6 27 8 1 4 3 2
輸出樣例#1:
077113
【資料規模】
m≤n≤2000000
線段樹維護最小值
#include#include#include
using
namespace
std;
#define n 8000006
inta[n],sum[n];
intread()
while(c >= '
0' && c <= '
9')
return sum *fg;
}void update(int
rt)void build(int l,int r,int
rt)
int m=(l+r)>>1
; build(l,m,rt
<<1
); build(m+1,r,rt<<1|1
); update(rt);
}int
ans;
intnowr,nowl;
void query(int l,int r,int
rt)
int m=(r+l)>>1
;
if(nowl<=m)query(l,m,rt<<1
);
if(nowr>m)query(m+1,r,rt<<1|1);}
intans1;
intmain()
else
ans=0x7fffffff
; query(
1,n,1
); printf(
"%d\n
",ans);//
線段樹
}
return0;
}
luogu P1440 求m區間內的最小值
乙個含有n項的數列 n 2000000 求出每一項前的m個數到它這個區間內的最小值。若前面的數不足m項則從第1個數開始,若前面沒有數則輸出0。輸入格式 第一行兩個數n,m。第二行,n個正整數,為所給定的數列。輸出格式 n行,第i行的乙個數ai,為所求序列中第i個數前m個數的最小值。輸入樣例 1 6 ...
Luogu P1440 求m區間內的最小值
這題可以用rmq st表 做!由於本題資料的特殊性,需要查詢的區間的元素個數大部分是一樣的 除了輸出的前 m 行元素個數不足 m 個的情況 我們就可以把st表 中 a 陣列 進行降維攻擊 霧 這樣一來使用rmq st表 就不會mle了!在時間方面,我們可以拿個變數 中 power 儲存 2 的 j ...
P1440 求M區間內的最小值
乙個含有 nn 項的數列,求出每一項前的 mm 個數到它這個區間內的最小值。若前面的數不足 mm 項則從第 11 個數開始,若前面沒有數則輸出 00。第一行兩個整數,分別表示 nn,mm。第二行,nn 個正整數,為所給定的數列 a ia i nn 行,每行乙個整數,第 ii 個數為序列中 a ia ...