当前位置: 首页 > 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();
}
http://www.xdnf.cn/news/412777.html

相关文章:

  • [网络层]ICMP协议
  • Java——API基础(String类和StringBuilder类)
  • 手写 vue 源码 === computed 实现
  • JavaScript高级进阶(七)
  • shell命令大全
  • 基于STM32、HAL库的BMP581气压传感器 驱动程序设计
  • springBoot中的Starter-启动器
  • 重学安卓14/15自由窗口freeform企业实战bug-学员作业
  • 本地文件查重管理工具EasyFileCount v3.0.5.1绿色版,支持查找大重复文件+自动分类
  • 客户端限流主要采用手段:纯前端验证码、禁用按钮、调用限制和假排队
  • jwt学习
  • 如何通过DNS解析实现负载均衡?
  • Android Exoplayer 实现多个音视频文件混合播放以及音轨切换
  • 3d模型的添加与设置
  • VMware虚拟机实例-docker启动失败
  • Linux文件编程——read函数与lseek函数
  • 火狐浏览器安装自定义插件
  • 人工智能的哲学与社会影响
  • 【时时三省】(C语言基础)字符数组的输入输出
  • 做好的QT软件,换一个笔记本打开后发现字体很小,部分字体还被控件遮挡
  • 提示工程实战指南:Google白皮书关键内容一文讲清
  • 第二十二天打卡
  • #将一个 .c 文件转变为可直接运行的文件过程及原理
  • CTF实战秘籍:跨平台文件合并与数据重构技术
  • linux-进程信号的产生
  • OJ判题系统第4期之判题机模块架构——设计思路、实现步骤、代码实现(工厂模式、代理模式的实践)
  • 嵌入式MCU和Linux开发哪个好?
  • FreeRTOS的学习记录(基础知识)
  • FPGA----petalinux开机启动自定义脚本/程序的保姆级教程(二)
  • 【超详细教程】安卓模拟器如何添加本地文件?音乐/照片/视频一键导入!