單調佇列 P1440 求m區間內的最小值

2021-09-25 07:43:37 字數 883 閱讀 8171

題目描述

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