洛谷 P1440 求m区间内的最小值(单调队列)
2024-09-06 00:01:09
题目链接
https://www.luogu.org/problemnew/show/P1440
显然是一道单调队列题目……
解题思路
对于单调队列不明白的请看这一篇博客:https://www.cnblogs.com/yinyuqin/p/10492882.html
这道题和模板唯一的不同点就是从0开始,一直输出n次。什么意思呢?
- 普通单调队列:单调队列中数据到达m个再输出
- 本题:从没有数据时就开始输出。
详细点说,就是输出0到0,0到1,0到2……一直到0到m-1,接着是1到m,2到m+1,3到m+2……一直到n-m到n-1的最小值。
具体可以研究一下样例,很容易就可以理解。
所以我们只需要在输出上做一点修改。
如果队列为空,说明这是第一个元素,就输出0到0之间的最小值,显然是0。
否则就每次在读入一个数之前,就输出单调队列里面的最小值。
而且我们发现,最后读入的数其实是没有用的!!坑啊
艰辛的做题过程
首先是TLE:
找了好长时间的bug,没想到竟然是cin cout 搞的!!盘他
十年oi一场空,cin、cout见祖宗。
然后是莫名RE:
原来当m==1时,少判断了一个q.empty()会爆掉。。。
无语。。。。。
AC代码
#include<iostream>
#include<deque>
#include<cstdio>
using namespace std;
int n,m;
struct num{ //储存每一个点的信息
int cnt,value; //cnt是编号 value是值
num(int a,int b):cnt(a),value(b){}//构造函数
};
deque<num> q; //定义一个双端队列,注意头文件
void makeq(int i,int in){ //见另一篇博客
if(q.empty()) q.push_back(num(i,in));
else{
num f=q.front();
if(i>=f.cnt+m) q.pop_front();
if(!q.empty()){ //注意判断队列是否为空
num b=q.back();
while(in<=b.value){
q.pop_back();
if(q.empty()) break;//注意再次判断队列是否为空
b=q.back();
}
}
q.push_back(num(i,in));
}
}
int main(){
cin>>n>>m;
for(int i=;i<=n;i++){
if(q.empty()) printf("0\n");//第一个输出0
else printf("%d\n",q.front().value);//后来每次输出单调队列的最小值
int in;
scanf("%d",&in); //注意用scanf
makeq(i,in); //让这个点入队
}
return ;
}
最新文章
- 洛谷10月月赛Round.3
- MVC4 自定义错误页面(转)
- PostgreSQL 添加自定义变量
- 编写更好的jQuery代码
- Android开发书籍推荐:从入门到精通系列学习路线书籍介绍
- git之常用指令
- ios-指纹识别
- js事件应用
- BindingNavigator操作DatagridView的数据
- Codeforces Round #339 Div.2 A - Link/Cut Tree
- c++ ANSI、UNICODE、UTF8互转
- sizeof _countof _tcslen的比较
- XML学习经验实例总结2
- [LeetCode129]Sum Root to Leaf Numbers
- ORA-01034 报错
- 网络知识梳理--OSI七层网络与TCP/IP五层网络架构及二层/三层网络(转)
- Codeforces1076E. Vasya and a Tree(dfs+离线+动态维护前缀和)
- 自动创建表出错 type=InnDB
- Linux连接字符串
- git log 退出方法
热门文章
- Smarty模板引擎模板文件.tpl和.html的区别
- openstack stein部署手册 5. placement
- 你不知道的hostname命令
- [CQOI2015]网络吞吐量(网络流+SPFA)
- java并发学习--第二章 spring boot实现线程的创建
- alert(1) to win 2
- 如何用node开发自己的cli工具
- Conservation Vs Non-conservation Forms of conservation Equations
- Spring MVC (二)
- JMeter-性能测试之报表设定的注意事项