luogu P1440 求m區間內的最小值

2022-02-28 04:42:53 字數 1265 閱讀 8188

乙個含有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

線段樹維護最小值

#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 ...