(……打了这么久orz我今天才知道这玩意是啥意思……)

没有老师就是飘啊……我居然学完树状数组和线段树连个队列都不会……orz orz orz

这篇是单调队列哦,不是优先队列(优先队列那种东西queue不就好了嘛)

咳咳咳废话说的真多,回到正题

什么是单调队列

咳咳咳反正是给自己看的,直接举个例子吧,比如一个从小到大的单调队列,那么这个队列中的每个元素的下标应符合递增,每个元素也应该符合递增

跟优先队列的区别应该是能看出来的吧……优先队列基本上就是排序好的数组了……(其实这么说,只是因为我不知道该怎么解释)

单调队列的算法思想

原始数组

下标 1 2 3 4 5
4 2 5 6 3

假如我们现在要将这整个数组加入从小到大的单调队列q

首先队列必备的两个指针:head  tail

队列本来为空,所以第一个元素直接入队,tail++

下标 1
4

第二个元素2要入队了,但这时候我们发现2<4,那么如果将2直接加入队列,显然不符合其递增的单调性,所以我们干掉它的前一个元素(嘤嘤嘤就是这么暴力),tail--,再把2入队,tail++

下标 1
2

第三个元素是5,5>2,符合其单调性,所以5直接入队tail++

下标 1 2
2 5

第四个元素是6,同上一步

下标 1 2 3
2 5 6

最后一个元素是3,同第二步,若要将3加入队列,不仅要干掉前面的6,tail--,前面的5也不能留!tail--(嗯就是这么凶)

这时候的队列就变成了这个样子

下标 1 2
2 3

ok,操作完成啦✿✿ヽ(°▽°)ノ✿

代码实现

结合我们刚刚的算法思想,我们就可以来搞一搞代码了QwQ

(s数组保存的是下标)

#include<bits/stdc++.h>
using namespace std;
int a[1000100],q[1000100],s[1000100];
int main()
{int n,k,tail,head;scanf("%d%d",&n,&k);for (int i=1;i<=n;i++)scanf("%d",&a[i]);head=1;tail=0;for (int i=1;i<=n;i++){//  cout<<"现在出场的是:"<<i<<endl; while (tail>=head&&a[i]<=q[tail]){//       cout<<"出队(tail):"<<s[tail]<<' '<<q[tail]<<endl;tail--;}tail++;q[tail]=a[i];s[tail]=i;while (s[head]<i-k+1){//      cout<<"出队(head):"<<s[head]<<' '<<q[head]<<endl;head++;}//   cout<<"现在的队首是"<<s[head]<<"   "<<q[head]<<endl;if (i>=k)printf("%d ",q[head]);} printf("\n");head=1;tail=0;for (int i=1;i<=n;i++){q[i]=0;s[i]=0;}for (int i=1;i<=n;i++){//   cout<<"现在出场的是:"<<i<<endl; while (tail>=head&&a[i]>=q[tail]){//       cout<<"出队(tail):"<<s[tail]<<' '<<q[tail]<<endl;tail--;}tail++;q[tail]=a[i];s[tail]=i;while (s[head]<i-k+1){//      cout<<"出队(head):"<<s[head]<<' '<<q[head]<<endl;head++;}     //  cout<<"现在的队首是"<<s[head]<<"   "<<q[head]<<endl;if (i>=k)printf("%d ",q[head]);} printf("\n");return 0;
}

我手头上没有纯裸题QwQ(其实就是懒QwQ)(咳咳主要是快下课了我想赶紧把这篇写完)

这篇是【传送门】洛谷1886 滑动窗口 的AC代码

其实就是两个裸单调队列加上队首出队操作而已,挺裸的一道题

(PS:调程序的时候我才知道!原来scanf不加&会.exe停止运行!printf加了&会输出奇奇怪怪的东西!!!(好吧其实还是我蒻))

但我在这里强烈安利一位大佬的题解QwQ!我就是看着他的题解学的单调队列!这里贴一下地址以便自己以后膜或者大家参观QwQ(我这惨淡的访问量到底是哪来的信心……)https://www.luogu.org/blog/hankeke/solution-p1886

好啦!完结撒花✿✿ヽ(°▽°)ノ✿

【总有一天我会把我学过的所有算法和所有写过的模板题都写成博客的!!!这是一个 假 真flag】

蒟蒻的单调队列orz,真的蒻相关推荐

  1. Buying Feed, 2010 Nov (单调队列优化DP)

    约翰开车回家,又准备顺路买点饲料了(咦?为啥要说"又"字?)回家的路程一共有 E 公里, 这一路上会经过 K 家商店,第 i 家店里有 Fi 吨饲料,售价为每吨 Ci 元.约翰打算 ...

  2. 蒟蒻的ACM数据结构(四)-单调队列和单调栈

    单调队列和单调栈 一.概念 二.实现 三.题目 单调队列 洛谷P1886 滑动窗口 解析 单调栈 [GXOI/GZOI2019]与或和 解析 POJ3250 Bad Hair Day 解析 POJ 2 ...

  3. 单调队列优化和决策单调性优化

    前言:dp蒟蒻拼命挽救一下dp a....,会围绕三个"形如"来写...但更重要的是本质理解啊qwq A.单调队列优化: 有时状态转移方程形如f[i][j]=min{f[i-1][ ...

  4. 【单调队列】【DP】城市交通(jzoj 1749)

    城市交通 jzoj 1749 题目大意 有n个点,x到y的前提是x<y,代价是(y−x)∗ax+by(y-x)*a_x+b_y(y−x)∗ax​+by​,问从1到n的最小代价是多少 输入样例 4 ...

  5. 【单调队列优化dp】jzoj4883灵知的太阳信仰 纪中集训提高B组

    [NOIP2016提高A组集训第12场11.10]灵知的太阳信仰 (File IO): input:array.in output:array.out Time Limits: 1000 ms Mem ...

  6. 区间划定最小值题解--单调队列

    滑动窗口求区间最小值–单调队列 题目如下----转自洛谷 题目描述 一个含有n项的数列(n<=2000000),求出每一项前的m个数到它这个区间内的最小值.若前面的数不足m项则从第1个数开始,若 ...

  7. 【DP】【单调队列优化】修剪草坪

    题目描述 在一年前赢得了小镇的最佳草坪比赛后,约翰变得懒惰了,再也没有修剪过草坪.现在,新一轮的比赛又开始了,约翰希望能够再次夺冠.然而,约翰家的草坪非常脏乱,因此,约翰需要让他的奶牛来完成这项工作. ...

  8. HDU 5945 Fxx and game 单调队列优化dp

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=5945 题目 Young theoretical computer scientist Fxx desi ...

  9. P2216 理想的正方形 单调队列 (二维)

    题目链接:https://www.luogu.org/problem/P2216 题意:求给定n*m的矩形中所有k*k的正方形块中最大值最小值之差(极差)最小 哇,大神的思路真的很帅 单调队列对每一行 ...

最新文章

  1. 世界银行拨款2293万美元支持印度并网屋顶太阳能
  2. Elasticsearch –使用模式替换过滤器和自定义分析器忽略查询中的特殊字符
  3. JS笔记-前端实现验证码功能
  4. 手机照片局部放大镜_手机摄影,竟然有3种对焦方式,想拍出专业水准,你必须了解...
  5. 使用 Swagger UI 与 Swashbuckle 创建 RESTful Web API 帮助文件
  6. Java并发编程之ReentrantReadWriteLock详解
  7. matlab中图像加噪函数imnoise
  8. 数学:概率论与数理统计
  9. 酒店旅业治安管理系统接口开发
  10. KingbaseES和PostgreSQL兼容
  11. 快速打开 控制面板下网络和 Internet下的网络连接
  12. 全球与中国汽车真皮内饰市场竞争形势及供需策略分析报告2022-2028年版
  13. 人工智能,大数据,深度学习,机器学习(百度云581G学习资料免费分享)
  14. 计算机小高考成绩,小高考成绩公布!各校4A人数排名出炉!快来看看最牛学校数据!...
  15. windows操作系统死机代码及其含义解剖
  16. 解决ping得通IP 但是ping 不通域名的问题
  17. 【AI人工智能】AI会对你的行业产生什么影响?
  18. 内存泄漏检测工具:Deleaker 2022
  19. Lyapunov稳定性理论
  20. 读书笔记写法--怎么做读书笔记

热门文章

  1. 认识你7年后终于领证了 2019-09-16
  2. 推荐系统 之 AFM和DIN
  3. 129. 求根节点到叶节点数字之和
  4. IAR Embedded Workbench 将支持 RISC-V 太空级处理器 NOEL-V
  5. 一页纸说清楚“什么是深度学习?”
  6. 骁龙780G和骁龙888哪个好 骁龙780G和骁龙888对比,哪个更强
  7. 数字图像处理中的车牌识别
  8. 我对嵌入式软件的理解
  9. python日常实用技能:使用python将大量数据导出到Excel中的
  10. Visual C++黑白棋游戏项目开发一:需求分析、系统架构设计(附源码和资源 可用于大作业)