洛谷1440 求m区间内的最小值
洛谷1440 求m区间内的最小值
本题地址:http://www.luogu.org/problem/show?pid=1440
题目描述
一个含有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:
0
7
7
1
1
3
说明
【数据规模】
m≤n≤2000000
【思路】
单调队列。
题目比较裸,直接用一个单调队列维护即可。单调队列第一次写,总结有如下需要注意的地方:
1、
注意维护的是什么,本题中维护的是一个满足序号 >=i-m+1 的序列,其中序列满足a值单调递增。
2、
注意边界,特别是初始情况下是否平凡。
3、
注意单调队列的维护添加
与取值之间的顺序,取决于使用单调队列的目的。
还有需要注意的是题目中要求i之前m个,每次取值是算上当前a的所以需要错开一个。
【代码】
#include<iostream>
#include<cstdio>
using namespace std; const int maxn = +; int a[maxn],que[maxn],d[maxn];
int n,m,front,rear; inline int read_int() {
char c; c=getchar();
while(!isdigit(c)) c=getchar(); int x=;
while(isdigit(c)) {
x=x*+c-'';
c=getchar();
}
return x;
} int main() {
n=read_int(); m=read_int();
a[]=<<; //边界不取
front=rear=;
for(int i=;i<=n;i++)
{
a[i]=read_int(); //注意顺序
while(front<=rear && (que[front]<(i-m+))) front++; while(front<=rear && a[i]<=a[que[rear]]) rear--; //注意维护a值最小的 que[++rear]=i; d[i]=a[que[front]]; }
cout<<<<"\n";
for(int i=;i<n;i++) cout<<d[i]<<"\n";
return ;
}
洛谷1440 求m区间内的最小值的更多相关文章
- 洛谷 1440 求m区间内的最小值
洛谷 1440 求m区间内的最小值 题目描述 一个含有n项的数列(n<=2000000),求出每一项前的m个数到它这个区间内的最小值.若前面的数不足m项则从第1个数开始,若前面没有数则输出0. ...
- 洛谷 P1440 求m区间内的最小值
传送门 思路 由于数据范围很大,所以使用单调队列,和滑动窗口这道题类似 首先第一个数输出\(0\),因为第一个数之前没有数 然后通过样例我们发现,最后一个数并没有派上什么用场,所以循环\(n-1\)轮 ...
- 洛谷—— P1440 求m区间内的最小值
https://www.luogu.org/problemnew/show/P1440 题目描述 一个含有n项的数列(n<=2000000),求出每一项前的m个数到它这个区间内的最小值.若前面的 ...
- [洛谷P1440]求m区间内的最小值
题目大意:给你n个数,求出每个数前m位的最小值 题解:单调队列,用一个可以双向弹出的队列来存一串数,满足里面的数具有单调性,我们可以假设它是单调递增的,即求最小的数.那么可以把要插入的这个数与队尾元素 ...
- 洛谷 P1440 求m区间内的最小值(单调队列)
题目链接 https://www.luogu.org/problemnew/show/P1440 显然是一道单调队列题目…… 解题思路 对于单调队列不明白的请看这一篇博客:https://www.cn ...
- 洛谷1440 求m区间的最小值 单调队列
题目描述 一个含有n项的数列(n<=2000000),求出每一项前的m个数到它这个区间内的最小值.若前面的数不足m项则从第1个数开始,若前面没有数则输出0. 输入格式: 第一行两个数n,m. 第 ...
- 求m区间内的最小值
洛谷P1440 求m区间内的最小值 ............................................................................... 以上 ...
- 单调队列——求m区间内的最小值
单调队列,顾名思义是指队列内的元素是有序的,队头为当前的最大值(单调递减队列)或最小值(单调递增序列),以单调递减队列为例来看队列的入队和出队操作: 1.入队: 如果当前元素要进队,把当前元素和队尾元 ...
- P1886 滑动窗口&&P1440 求m区间内的最小值
声明:下面这两个题就不要暴力了,学一学单调队列吧 推荐博文:https://www.cnblogs.com/tham/p/8038828.html 单调队列入门题 P1440 求m区间内的最小值 题目 ...
随机推荐
- HDU_2014 青年歌手大奖赛_评委会打分
Problem Description 青年歌手大奖赛中,评委会给参赛选手打分.选手得分规则为去掉一个最高分和一个最低分,然后计算平均得分,请编程输出某选手的得分. Input 输入数据有多组,每 ...
- isset(), empty()
isset()测试$a = '';isset($a); // true $a = FALSE;var_dump(isset($a)); // true $a = NULL;var_dump(isset ...
- placeholder属性兼容js支持
$(function(){ //判断浏览器是否支持placeholder属性 supportPlaceholder='placeholder'in document.createElement('in ...
- Net Core Docker
Net Core Docker轻量级的web框架 .net core现在已经有了大的发展,虽然笔者现在已经从事python开发,但是一直在关注.net的发展,在逛博客园的时候,发现有大家都会提到N ...
- Dom学习笔记-(一)
一.概述 DOM(文档对象模型)是针对HTML和XML文档的一个API,其脱胎于DHTML. DOM可以将任意HTML和XML文档描绘成一个由多层节点构成的结构. 每一个文档包含一个根节点-文档节点, ...
- 根据WSDL生成代理类方式(2)
运行开发人员工具提示 输入命令行svcutil http://localhost:8080/Test/TestClassPort?wsdl
- 【转】Spring 注解学习手札(超好的springmvc注解教程)
Spring 注解学习手札(一) 构建简单Web应用 Spring 注解学习手札(二) 控制层梳理 Spring 注解学习手札(三) 表单页面处理 Spring 注解学习手札(四) 持久层浅析 Spr ...
- 李洪强漫谈iOS开发[C语言-028]-逗号表达式
- [转贴]C编译过程概述
http://my.oschina.net/apeng/blog/105245 C 编译过程概述 目前Linux下最常用的C语言编译器是GCC(GNU Compiler Collection),它是G ...
- QWidget与HWND的互相转换
QWidget与HWND的互相转换 在编写Windows的应用程序时,我们有时不可避免地要与Windows平台固有的Win32 API打交道,但是Win32 API里面常常用到的HWND等诸多句柄QT ...