当前位置: 首页 > news >正文

滑动窗口/单调队列

题目链接:P1886 滑动窗口 /【模板】单调队列 - 洛谷


题目的意思是通过窗口的不断滑动,输出此时的最大值和最小值

思路:

        为了使思路更加清楚,使用一个双端队列来模拟这个过程,以最小值举例:中心是维护一个单调递增的窗口,当有新的元素时,首先从前面剔除所有之前的元素(此时不在窗口里),然后从后边剔除所有比它大的元素,输出此时的队头(最小值)。最大值与之类似。

代码:

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1e6+5;
int a[N];
void solve()
{deque<int> q;int n,k;cin >> n >> k;for(int i=1; i<=n; i++) cin >> a[i];for(int i=1; i<=n; i++){while(!q.empty()&&i-k>=q.front())//去掉窗口之前的元素q.pop_front();while(!q.empty()&&a[q.back()]>a[i])//将大于的全部去掉,维护单调递增q.pop_back();q.push_back(i);//将值存进去if(i>=k)//输出此时的最小值cout << a[q.front()] << ' ';}cout << endl;q.clear();//记得清空队列for(int i=1; i<=n; i++)//与最小值同理{while(!q.empty()&&i-k>=q.front())q.pop_front();while(!q.empty()&&a[q.back()]<a[i])q.pop_back();q.push_back(i);if(i>=k)cout << a[q.front()] << ' ';}
}
signed main()
{ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int t=1;
//	cin >> t;while(t--) solve();
}

相关文章:

  • 告别数据僵尸!Redis实现自动清理过期键值对
  • Linux环境基础开发工具的使用(yum、vim、gcc、g++、gdb、make/Makefile)
  • Git 用法总结
  • [Git]ssh模式每次提交都要输入密码
  • 【AutoGen革命】多智能体协作系统的架构设计与工程实践
  • Java后端文件类型检测(防伪造)
  • C++.Windows图形
  • DVWA靶场保姆级通关教程--07SQL注入下
  • Open CASCADE学习|由大量Edge构建闭合Wire:有序与无序处理的完整解析
  • Java SE所需工具与常见类型和运算符介绍
  • SWMM在城市排水防涝规划中的实战应用:模型校准、情景模拟与工程决策
  • TCPIP详解 卷1协议 七 防火墙和网络地址转换
  • vue3+three 搭建平面上滚动旋转的几何体
  • 第一章 应急响应-webshell查杀
  • 无线定位之 二 SX1302 网关源码 thread_down 线程详解
  • RAGFlow 初步尝试 (01)
  • Leetcode (力扣)做题记录 hot100(34,215,912,121)
  • MongoDB 操作可能抛出哪些异常? 如何优雅的处理?
  • 全球变暖-bfs
  • matlab计算天线的近场和远场
  • 美股全线收涨:道指涨逾千点,纳斯达克中国金龙指数涨5.4%
  • 寒武纪陈天石:公司的产品力获得了行业客户广泛认可,市场有望迎来新增量需求
  • 全国层面首次!《防震减灾基本知识与技能大纲》发布
  • 上海护师邢红获第50届南丁格尔奖,她为何能摘得护理界最高荣誉
  • 总没胃口,一吃就饱……别羡慕,也可能是生病了
  • 科学家用AI寻找外星生命