洛谷  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区间内的最小值的更多相关文章

  1. 洛谷1440 求m区间内的最小值

    洛谷1440 求m区间内的最小值 本题地址:http://www.luogu.org/problem/show?pid=1440 题目描述 一个含有n项的数列(n<=2000000),求出每一项 ...

  2. 洛谷 P1440 求m区间内的最小值

    传送门 思路 由于数据范围很大,所以使用单调队列,和滑动窗口这道题类似 首先第一个数输出\(0\),因为第一个数之前没有数 然后通过样例我们发现,最后一个数并没有派上什么用场,所以循环\(n-1\)轮 ...

  3. 洛谷—— P1440 求m区间内的最小值

    https://www.luogu.org/problemnew/show/P1440 题目描述 一个含有n项的数列(n<=2000000),求出每一项前的m个数到它这个区间内的最小值.若前面的 ...

  4. [洛谷P1440]求m区间内的最小值

    题目大意:给你n个数,求出每个数前m位的最小值 题解:单调队列,用一个可以双向弹出的队列来存一串数,满足里面的数具有单调性,我们可以假设它是单调递增的,即求最小的数.那么可以把要插入的这个数与队尾元素 ...

  5. 洛谷 P1440 求m区间内的最小值(单调队列)

    题目链接 https://www.luogu.org/problemnew/show/P1440 显然是一道单调队列题目…… 解题思路 对于单调队列不明白的请看这一篇博客:https://www.cn ...

  6. 洛谷1440 求m区间的最小值 单调队列

    题目描述 一个含有n项的数列(n<=2000000),求出每一项前的m个数到它这个区间内的最小值.若前面的数不足m项则从第1个数开始,若前面没有数则输出0. 输入格式: 第一行两个数n,m. 第 ...

  7. 求m区间内的最小值

    洛谷P1440 求m区间内的最小值 ............................................................................... 以上 ...

  8. 单调队列——求m区间内的最小值

    单调队列,顾名思义是指队列内的元素是有序的,队头为当前的最大值(单调递减队列)或最小值(单调递增序列),以单调递减队列为例来看队列的入队和出队操作: 1.入队: 如果当前元素要进队,把当前元素和队尾元 ...

  9. P1886 滑动窗口&&P1440 求m区间内的最小值

    声明:下面这两个题就不要暴力了,学一学单调队列吧 推荐博文:https://www.cnblogs.com/tham/p/8038828.html 单调队列入门题 P1440 求m区间内的最小值 题目 ...

随机推荐

  1. JBoss jmx-console中的秘密

    JBoss jmx-console中的秘密 https://wenku.baidu.com/view/fe196f047cd184254b35351d.html

  2. 转:Eclipse+webservice开发实例

    原文地址:http://blog.csdn.net/xw13106209/article/details/7049614 1.参考文献: 1.利用Java编写简单的WebService实例  http ...

  3. 对MBProgressHUD进行二次封装并精简使用

    对MBProgressHUD进行二次封装并精简使用 https://github.com/jdg/MBProgressHUD 几个效果图: 以下源码是MBProgressHUD支持最新的iOS8的版本 ...

  4. [翻译] DKTagCloudView - 标签云View

    DKTagCloudView 效果(支持点击view触发事件): Overview DKTagCloudView is a tag clouds view on iOS. It can generat ...

  5. Difference Between Arraylist And Vector : Core Java Interview Collection Question

    Difference between Vector and Arraylist is the most common  Core Java Interview question you will co ...

  6. 一、Vim编辑器 二、用户和组管理 三、软件的安装(jdk,mysql) 四、Shell编程

    一.Vim编辑器的使用 1. vim编辑器的运行模式 编辑模式:等待用户编辑命令的输入 插入模式:编辑文本内容 命令模式:执行命令 2. 使用 :vim 文件名 3. 查看当前vim编辑器介绍:vim ...

  7. 安装64位php开发环境

    最近听说PHP5.4速度很快,所以想建立一个本地环境测试下.我打算用本地windows xp sp3下安装PHP5.4.8.Apache2.4.3和Mysql5.5.28. 首先去下载PHP.Apac ...

  8. IDL创建泰森多边形

    结果图: 附加源码: PRO testVoronoi idx = 0 ; 创建离散点 CASE idx OF ; 随机离散点 0: BEGIN N = 36 X = RANDOMN(seed, N) ...

  9. DevExpress01:Bar Manager,bar 、Toolbars

    Bar Manager : 不可见的控件 如果想在窗体或用户控件添加工具条或弹出菜单,我们需要把一个不可见的控件 BarManager拖放到这个窗体或用户控件上. 这个BarManager控件维护工具 ...

  10. jquery ajax跨域解决

    双十一开发了一个抽奖API,最近上线了,各个事业部的大神们需要前台页面,异步调用我的抽奖API,要我提供js. js 提供之后发现不对,跨域了.之前也碰到过跨域的问题,研究过这个问题,三种方法解决. ...