~~单调队列(数据结构)(附题目)
模板
常见模型:找出滑动窗口中的最大值/最小值
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;
}
~~单调队列(数据结构)(附题目)相关推荐
- 单调队列 Monotonic Queue / 单调栈 Monotonic Stack
2018-11-16 22:45:48 一.单调队列 Monotone Queue 239. Sliding Window Maximum 问题描述: 问题求解: 本题是一个经典的可以使用双端队列或者 ...
- 算法学习12: 单调队列和单调栈
算法学习12: 单调队列和单调栈 单调队列 单调队列解决的问题: 窗口内最大/最小值的更新结构 单调队列的结构和操作 单调队列的应用 题目一: 生成窗口最大值数组[leetcode 239](http ...
- 0x12.基本数据结构 — 队列与单调队列
目录 一.队列 0.UVA540 团体队列 Team Queue 1.AcWing 133. 蚯蚓(模拟优先队列) 二 .单调队列 0.AcWing 135. 最大子序和(单调队列) 1.luogu ...
- 数据结构录 之 单调队列单调栈。
队列和栈是很常见的应用,大部分算法中都能见到他们的影子. 而单纯的队列和栈经常不能满足需求,所以需要一些很神奇的队列和栈的扩展. 其中最出名的应该是优先队列吧我觉得,然后还有两种比较小众的扩展就是单调 ...
- Hdu 4193 Non-negative Partial Sums (数据结构_单调队列)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4193 题目大意: 给定一个长度为n的循环序列,从n个不同位置开始,问有几个位置使得一下情况成立:所有 ...
- 蒟蒻的ACM数据结构(四)-单调队列和单调栈
单调队列和单调栈 一.概念 二.实现 三.题目 单调队列 洛谷P1886 滑动窗口 解析 单调栈 [GXOI/GZOI2019]与或和 解析 POJ3250 Bad Hair Day 解析 POJ 2 ...
- 【数据结构】单调栈和单调队列 详解+例题剖析
算法:单调栈和单调队列 一.单调栈和单调队列 二.单调栈例题 1.模板题入门 2.不懂不要急,看这道题 三.单调队列例题 1.入门 2.进阶 一.单调栈和单调队列 单调栈和单调队列与普通的栈,队列不同 ...
- Hdu 2430 Beans (数据结构_单调队列)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2430 题目大意:有n坨豌豆,每坨都有w[i]个,现在要从中选择连续的若干坨,然后用一个能装p个豌豆的背 ...
- 数据结构 - 单调栈、单调队列
单调栈:每日温度 请根据每日 气温 列表 temperatures ,请计算在每一天需要等几天才会有更高的温度.如果气温在这之后都不会升高,请在该位置用 0 来代替 单调栈基本只处理NGE问题(Nex ...
- Acwing算法基础课学习笔记(四)--数据结构之单链表双链表模拟栈模拟队列单调栈单调队列KMP
单链表 算法题中最常考的单链表就是邻接表(用来存储图和数),比如最短路问题,最小生成树问题,最大流问题.双链表用于优化某些问题. 利用数组来表达单链表:存储值和指针的两个数组利用下标进行关联. 需要注 ...
最新文章
- ATS 4.2.3隐藏服务器名称及版本号的方法
- Python几种主流框架
- LeetCode-笔记-45.跳跃游戏II-贪心算法
- Stella Forum v2 线上版开发总结
- 音视频技术开发周刊(第122期)
- AUTOSAR从入门到精通100讲(十二)-V2X通信安全技术要求标准
- Singularity 介绍
- 每日算法系列【LeetCode 943】最短超级串
- char与byte的差别
- 智能优化算法:探路者优化算法-附代码
- 如何解决设备管理中的难点?
- GSM/GPRS模组硬件电源设计指南
- 高德地图两种引入方式
- SHOI 2008 仙人掌图 BZOJ 1023
- c语言设计简单计算器,c语言设计简单计算器实现加减乘除运算
- 电子邮件发错了怎么撤回?原来邮件误发也有“后悔药”
- VirtualLab Fusion:基于微软专利的蝴蝶型出瞳扩展光导
- [软件人生]别人对自己的评价应该如何看待(与张勋对话之五)
- stm32 驱动 触摸屏
- 面试06,[长亮科技]()(offer)、[荔枝]()FM(在确定部门和薪资)、[涂鸦智能]()(第一轮电话面半小时,待后续)、华资软件(HR面)、[广州速游]()(已挂)。至于公司怎么样不加以言论。