洛谷 1440 求m区间内的最小值
题目描述
一个含有n项的数列(n<=2000000),求出每一项前的m个数到它这个区间内的最小值。若前面的数不足m项则从第1个数开始,若前面没有数则输出0。
输入输出格式
输入格式:
第一行两个数n,m。
第二行,n个正整数,为所给定的数列。
输出格式:
n行,第i行的一个数ai,为所求序列中第i个数前m个数的最小值。
题解:
偷偷告诉你,我超级喜欢暴力的。所以看到这个题的第一反应,就是打暴力
// luogu-judger-enable-o2
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
using namespace std;
int a[],n,m;
int main(){
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
scanf("%d",&a[i]);
cout<<<<endl;
for(int i=;i<=n;i++){
int s=i-m,minn=;
if(s<)
s=;
for(int j=s;j<i;j++)
minn=min(minn,a[j]);
cout<<minn<<endl;
}
return ;
}
hhh,没想到,居然有50分;
next,我还是想不出正解,因为那时候刚学队列然而我对队列无感,对于讲队列的学长更是,emmm。在这里吐槽一句,他的代码实在是太丑了。
然后,我就开始想方设法,为所欲为的给它提速,然后加了一个特判
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
using namespace std;
int a[],n,m,minn=,minp;
int main(){
scanf("%d%d",&n,&m);
for(int i=; i<=n; i++)
scanf("%d",&a[i]);
cout<<<<endl;
for(int i=; i<=n; i++){
int s=i-m;
if(s<) s=;
if(a[i-]<=minn) minn=a[i-],minp=i-;
if(minp<s){
minn=a[s],minp=s;
for(int j=s; j<i; j++)
if(a[j]<=minn)
minn=a[j],minp=j;
}
cout<<minn<<endl;
}
return ;
}
然后,居然70了,哇,amazing。
最后呢,听一位学长说,cout输出‘\n’比printf或者输出endl快,就试了一哈子。
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
using namespace std;
int a[],n,m,minn=,minp;
int main(){
scanf("%d%d",&n,&m);
for(int i=; i<=n; i++)
scanf("%d",&a[i]);
cout<<<<endl;
for(int i=; i<=n; i++){
int s=i-m;
if(s<) s=;
if(a[i-]<=minn) minn=a[i-],minp=i-;
if(minp<s){
minn=a[s],minp=s;
for(int j=s; j<i; j++)
if(a[j]<=minn)
minn=a[j],minp=j;
}
cout<<minn<<"\n";
}
return ;
}
这样居然A了,简直了。
不过呢,还是要尊重正解。
#include<complex>
#include<cstdio>
using namespace std;
const int N=2e6+;
int n,m,head=,tail,a[N],q[N];
int main() {
scanf("%d%d",&n,&m);
for(int i=; i<=n; i++)
scanf("%d",&a[i]);
q[++tail]=;
printf("0\n");
for(int i=; i<=n; i++) {
printf("%d\n",a[q[head]]);
if(q[head]<=i-m)head++;
while(head<=tail && a[q[tail]]>=a[i])
tail--;
q[++tail]=i;
}
return ;
}
正解是队列。
题目说完了,进入吐槽时间。
吐槽:
讲队列的那位学长真的是,我第一次听他讲课的时候还没有感觉他长的那么惨无人道,惨绝人寰。现在真是越看越,emmm。话说他给我们布置的题目,说是用队列做的,我全没用队列,全用的暴力诶,哎也不是不想写队列,emmm,不会啊,现在更是好久没复习队列了,感觉队列和栈都快分不清楚了。哎,看来我有必要继续颓废了。hhh
最后祝大家,大吉大利,今晚吃鸡啊哈。
一世安宁
洛谷 1440 求m区间内的最小值的更多相关文章
- 洛谷1440 求m区间内的最小值
洛谷1440 求m区间内的最小值 本题地址:http://www.luogu.org/problem/show?pid=1440 题目描述 一个含有n项的数列(n<=2000000),求出每一项 ...
- 洛谷 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区间内的最小值 题目 ...
随机推荐
- 在ubuntu中用apt-get安装LEMP栈(linux+nginx+mysql+php)
在ubuntu上安装lamp大家应该都很熟悉了,但对于现在很流行的lemp栈怎么样用apt-get安装,这样介绍的文章的不多.下面我用Ubuntu 12.04 LTS为例来介绍下如何用apt-get安 ...
- 安装Linux Centos系统硬盘分区方法
一.硬盘回顾 无论是安装Windows还是Linux操作系统,硬盘分区都是整个系统安装过程中最为棘手的环节.硬盘一般分为IDE硬盘.SCSI硬盘和SATA硬盘三种,在Linux系统中,IDE接口的硬盘 ...
- MySQL慢日志简介及Anemometer工具介绍
作者:王航威 - fordba.com 来源:http://fordba.com/box-anemometer-visual-mysql-slow.html,叶师傅对原文内容略有调整 备注:王航威是知 ...
- [MongoDB]------windos远程服务器部署连接
1.连接前的准备 这里就省略了服务器上安装的操作,跟上一节是一样的流程. 连接到远程服务器,首先需要到远程服务器上在mongoDb安装根目录下的bin文件夹(默认安装目录是C:\Program Fil ...
- 操作系统之Linux的内存分页管理
内存是计算机的主存储器.内存为进程开辟出进程空间,让进程在其中保存数据.我将从内存的物理特性出发,深入到内存管理的细节,特别是了解虚拟内存和内存分页的概念. 内存 简单地说,内存就是一个数据货架.内存 ...
- Python读文件报错:SyntaxError: Non-ASCII character in file
打开city.py文件时报错 问题原因: 程序中的编码错误,python默认是acii模式,没有支持utf8.如果代码中有汉字 ,就会报错 解决方案: 源代码文件(city.py)第一行添加:#cod ...
- 包学会之浅入浅出Vue.js:结业篇
在第一篇<包学会之浅入浅出Vue.js:开学篇>和上一篇<包学会之浅入浅出Vue.js:升学篇>的学习中,我们首先了解了Vue环境的搭建以及两个重要思想——路由和组件的学习,通 ...
- hdfs的java接口简单示例
public class HDFSDemo { private FileSystem fs = null; @Before public void init() throws IOException, ...
- $2018/8/15 = Day \ \ 1$杂题整理
\(\mathcal{Morning}\) \(Task1\)高精度\(\times\)高精度 哦呵呵--真是喜闻乐见啊,我发现这一部分比较有意思于是就打算整理下来233.窝萌现在有一个整数\(A = ...
- c实现 简单的文件管理 不含交互
实现如下功能: 1.读取指定目录下的所有子目录和文件信息(比如:指定目录为C:/temp则把此目录 下的所有子目录下的文件信息读出来)2.在C盘创建一个以个人姓名命名的目录(比如:张三)3.在目录下创 ...