模板

常见模型:找出滑动窗口中的最大值/最小值
int hh = 0, tt = -1;
for (int i = 0; i < n; i ++ )
{while (hh <= tt && check_out(q[hh])) hh ++ ;  // 判断队头是否滑出窗口while (hh <= tt && check(q[tt], i)) tt -- ;q[ ++ tt] = i;
}

题目举例

给定一个大小为n≤106的数组。

有一个大小为k的滑动窗口,它从数组的最左边移动到最右边。

您只能在窗口中看到k个数字。

每次滑动窗口向右移动一个位置。

以下是一个例子:

该数组为[1 3 -1 -3 5 3 6 7],k为3。

您的任务是确定滑动窗口位于每个位置时,窗口中的最大值和最小值。

输入格式
输入包含两行。

第一行包含两个整数n和k,分别代表数组长度和滑动窗口的长度。

第二行有n个整数,代表数组的具体数值。

同行数据之间用空格隔开。

输出格式
输出包含两个。

第一行输出,从左至右,每个位置滑动窗口中的最小值。

第二行输出,从左至右,每个位置滑动窗口中的最大值。

输入样例:

8 3
1 3 -1 -3 5 3 6 7

输出样例:

-1 -3 -3 -3 3 3
3 3 5 5 6 7

AC的C++代码:

#include <bits/stdc++.h>
using namespace std;
const int N=1e6+10;
int a[N],n,m,f,i,j,s_min[N],s_max[N];
deque<int> min_val,max_val;
int main()
{ios::sync_with_stdio(false);cin>>n>>m;for(int i=1;i<=n;i++)cin>>a[i];min_val.push_front(1);max_val.push_front(1);s_min[1]=1;s_max[1]=1;m--;for(int i=2;i<=n;i++){while (min_val.size() && min_val.front()+m<i)//如果队头已经不满足条件,在当前候选区间了min_val.pop_front();while (max_val.size() && max_val.front()+m<i)//如果队头已经不满足条件,在当前候选区间了max_val.pop_front();while (min_val.size() && a[min_val.back()]>=a[i])//生存能力弱,弹出min_val.pop_back();while (max_val.size() && a[max_val.back()]<=a[i])//生存能力弱,弹出max_val.pop_back();//if (a[i]<=min_val.front()) 生存能力,不只是看值的大小,还有位置问题min_val.push_back(i);//if (a[i]>=max_val.front()) 生存能力,不只是看值的小小,还有位置问题max_val.push_back(i);s_min[i]=min_val.front();s_max[i]=max_val.front();}for(int i=m+1;i<=n;i++)cout<<a[s_min[i]]<<" ";cout<<endl;for(int i=m+1;i<=n;i++)cout<<a[s_max[i]]<<" ";return 0;
}

~~单调队列(数据结构)(附题目)相关推荐

  1. 单调队列 Monotonic Queue / 单调栈 Monotonic Stack

    2018-11-16 22:45:48 一.单调队列 Monotone Queue 239. Sliding Window Maximum 问题描述: 问题求解: 本题是一个经典的可以使用双端队列或者 ...

  2. 算法学习12: 单调队列和单调栈

    算法学习12: 单调队列和单调栈 单调队列 单调队列解决的问题: 窗口内最大/最小值的更新结构 单调队列的结构和操作 单调队列的应用 题目一: 生成窗口最大值数组[leetcode 239](http ...

  3. 0x12.基本数据结构 — 队列与单调队列

    目录 一.队列 0.UVA540 团体队列 Team Queue 1.AcWing 133. 蚯蚓(模拟优先队列) 二 .单调队列 0.AcWing 135. 最大子序和(单调队列) 1.luogu ...

  4. 数据结构录 之 单调队列单调栈。

    队列和栈是很常见的应用,大部分算法中都能见到他们的影子. 而单纯的队列和栈经常不能满足需求,所以需要一些很神奇的队列和栈的扩展. 其中最出名的应该是优先队列吧我觉得,然后还有两种比较小众的扩展就是单调 ...

  5. Hdu 4193 Non-negative Partial Sums (数据结构_单调队列)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4193 题目大意: 给定一个长度为n的循环序列,从n个不同位置开始,问有几个位置使得一下情况成立:所有 ...

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

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

  7. 【数据结构】单调栈和单调队列 详解+例题剖析

    算法:单调栈和单调队列 一.单调栈和单调队列 二.单调栈例题 1.模板题入门 2.不懂不要急,看这道题 三.单调队列例题 1.入门 2.进阶 一.单调栈和单调队列 单调栈和单调队列与普通的栈,队列不同 ...

  8. Hdu 2430 Beans (数据结构_单调队列)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2430 题目大意:有n坨豌豆,每坨都有w[i]个,现在要从中选择连续的若干坨,然后用一个能装p个豌豆的背 ...

  9. 数据结构 - 单调栈、单调队列

    单调栈:每日温度 请根据每日 气温 列表 temperatures ,请计算在每一天需要等几天才会有更高的温度.如果气温在这之后都不会升高,请在该位置用 0 来代替 单调栈基本只处理NGE问题(Nex ...

  10. Acwing算法基础课学习笔记(四)--数据结构之单链表双链表模拟栈模拟队列单调栈单调队列KMP

    单链表 算法题中最常考的单链表就是邻接表(用来存储图和数),比如最短路问题,最小生成树问题,最大流问题.双链表用于优化某些问题. 利用数组来表达单链表:存储值和指针的两个数组利用下标进行关联. 需要注 ...

最新文章

  1. ATS 4.2.3隐藏服务器名称及版本号的方法
  2. Python几种主流框架
  3. LeetCode-笔记-45.跳跃游戏II-贪心算法
  4. Stella Forum v2 线上版开发总结
  5. 音视频技术开发周刊(第122期)
  6. AUTOSAR从入门到精通100讲(十二)-V2X通信安全技术要求标准
  7. Singularity 介绍
  8. 每日算法系列【LeetCode 943】最短超级串
  9. char与byte的差别
  10. 智能优化算法:探路者优化算法-附代码
  11. 如何解决设备管理中的难点?
  12. GSM/GPRS模组硬件电源设计指南
  13. 高德地图两种引入方式
  14. SHOI 2008 仙人掌图 BZOJ 1023
  15. c语言设计简单计算器,c语言设计简单计算器实现加减乘除运算
  16. 电子邮件发错了怎么撤回?原来邮件误发也有“后悔药”
  17. VirtualLab Fusion:基于微软专利的蝴蝶型出瞳扩展光导
  18. [软件人生]别人对自己的评价应该如何看待(与张勋对话之五)
  19. stm32 驱动 触摸屏
  20. 面试06,[长亮科技]()(offer)、[荔枝]()FM(在确定部门和薪资)、[涂鸦智能]()(第一轮电话面半小时,待后续)、华资软件(HR面)、[广州速游]()(已挂)。至于公司怎么样不加以言论。

热门文章

  1. Linux kernel进行编译时提示No rule to make target `menconfig'
  2. ecshop dizcuz会员整合
  3. Apache安装及jboss部署说明文档1
  4. 在WinForm程序中嵌入ASP.NET[转]
  5. VB.NET2005通过泛型实现的KMP查找算法
  6. P2207 Photo
  7. Perceptual:英特尔感知计算挑战赛 正式启动
  8. 在VC6中使用ADO读取Oracle中的BLOB字段
  9. Linux系统的目录结构 及各目录用途详解
  10. 4个关于中台最常见的误区,用最通俗的话给你一次解释清楚