C - 滑动窗口 /【模板】单调队列

2023-11-18

Description

有一个长为 n 的序列 a,以及一个大小为 k 的窗口。现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值。

例如:

The array is [1,3,−1,−3,5,3,6,7] and k=3。

Input

输入一共有两行,第一行有两个正整数 n,k。
第二行 n 个整数,表示序列 a

Output

输出共两行,第一行为每次窗口滑动的最小值
第二行为每次窗口滑动的最大值

Sample 1

Inputcopy Outputcopy
8 3
1 3 -1 -3 5 3 6 7
-1 -3 -3 -3 3 3
3 3 5 5 6 7

Hint

【数据范围】
对于50% 的数据,1≤n≤10^5;
对于100% 的数据,1≤k≤n≤10^6,ai​∈[−231,231)。

 

#include<iostream>
using namespace std;
const int N = 1e6 + 10;
int a[N], maxq[N], minq[N];
int n, m;

//h是队头,用于输出答案;t是队尾,用于加入和删除元素
//注意:对头为左,队尾为右,队头只出,队尾可出可进;因此若队内有元素,则h<=t
//max队内的元素因保持单调递减的性质,加入的不是元素值,而是元素所在数组a中的下标
void maxfind() {
	int h = 0, t = -1;

	for (int i = 1; i <= n; i++)
	{
		if (h <= t && maxq[h] <= i - m) h++;    //不在当前滑动窗口的元素删除
		while (h <= t && a[i] >= a[maxq[t]]) t--; //a[i]为当前元素,若当前元素大于队尾的元素,则需要删除,时其满足单调递减的性质
		maxq[++t] = i;   //加入新元素的下标
		if(i>=m) cout << a[maxq[h]] << " ";//输出结果
	}
}
//原理同上
void minfind() {
	int h = 0, t = -1;

	for (int i = 1; i <= n; i++)
	{
		if (h <= t && minq[h] <= i - m) h++;
		while (h <= t && a[i] <= a[minq[t]]) t--;
		minq[++t] = i;
		if(i>=m) cout << a[minq[h]] << " ";
	}
}

int main()
{
	cin >> n >> m;
	for (int i = 1; i <= n; i++) cin >> a[i];
	minfind();
	cout << endl;
	maxfind();
	return 0;
}

 单调队列模板(滑动窗口)_滑动窗口 /【模板】单调队列_胡牧之.的博客-CSDN博客

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C - 滑动窗口 /【模板】单调队列 的相关文章

随机推荐

  • 红帽子redhat linux 9.0官方下载地址,附MD5校验码

    红帽子redhat linux 9 0官方下载地址如下 https archive download redhat com pub redhat linux 9 en iso i386 shrike i386 disc1 iso https
  • 洛谷-P1010-幂次方-普及(摁写+递归/二进制+递归)

    一 题目描述 二 示例及提示 输入格式 一行一个正整数 n 输出格式 符合约定的 n的 0 2 表示 在表示中不能有空格 输入输出样例 输入 1 1315 输出 1 2 2 2 2 0 2 2 2 2 2 0 2 2 2 2 0 2 2 0
  • [总结]PostgreSQL服务启动又停止的解决方法

    安装PostgreSQL数据库8 3版本后 启动数据库服务 却弹出提示服务启动后又停止 一些服务自动停止 如果他们没有什么可做的 例如性能日志和警报服务 这个时候需要查看事件查看器的报错消息 1 当错误为could not create i
  • 【Python】六个惊人的未知 Python 库

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • MySQL安装和图形化工具Workbench

    阅读整理自 MySQL 必知必会 朱晓峰 详细内容请登录 极客时间 官网购买专栏 文章目录 安装与配置 1 选择安装类型 2 安装服务器及相关组件 3 配置服务器 4 身份验证 5 设置密码和用户权限 6 配置 Windows 服务 图形化
  • 毕业设计-基于大数据招聘岗位可视化系统-python

    目录 前言 课题背景和意义 实现技术思路 实现效果图样例 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为毕业后面临的就业升学做准备 一边要为毕业设计耗费大量精力 近几年各个学校要求的毕设项目越来越难 有不少课题是研究生级别难度
  • compileDebugKotlin FAILED Unresolved reference: xxxx

    Task client compileDebugKotlin FAILED e MainActivity kt 64 13 Unresolved reference CommendUtils A项目引用了library 但是一直报错 解决
  • 基于A40I/T3 SDK平台的QT4.8移植和应用开发连载(四)-盈鹏飞嵌入式

    文记录了QT4 8图形界面在全志A40I T3 SDK平台上的移植过程 说明过程中可能会技术瑕疵 希望大家提供宝贵意见 本文移植的平台来自于盈鹏飞嵌入式的CoM X40I T3A平台 处理器分别时是全志的A40I T3 以下是盈鹏飞嵌入式C
  • 数据库多维迭代算法

    关键词 数据库 迭代 递归 多维 一 两种传统的数据库迭代结构算法 对于数据库的迭代结构 有两种传统的算法 递归算法和边界算法 比如对于下面图1的结构 图1 递归算法的数据结构如表1所示 节点id 节点值 父节点id 1 1111 2 3
  • USDP使用笔记(八)Flink配置及简单测试

    Flink配置Flink配置及简单测试 上一篇 https lizhiyong blog csdn net article details 123560865 将USDP2 0自带的Flink更换为Flink1 14后 还没有来得及改配置
  • pycharm如何配置Anaconda虚拟环境

    文章目录 一 Anaconda虚拟环境创建 二 pycharm添加虚拟环境 一 Anaconda虚拟环境创建 1 此电脑 右键 属性 高级系统设置 高级 环境变量 系统变量 path 新建 相应路径 Anaconda 相应路径 Anacon
  • 小程序和Vue写法的区别

    小程序和Vue写法的区别主要有以下几点 语法不同 小程序使用的是WXML WXSS和JS 而Vue使用的是HTML CSS和JSX 数据绑定方式不同 小程序使用的是双向数据绑定 而Vue使用的是单向数据流 1 在小程序中需要使用e curr
  • oracle数据库imp/sqlplus命令无效引发的问题

    好久没有使用Oracle数据库 在导入数据库dmp文件时出现imp命令无效 oracle导入dmp文件命令 imp user password ip 端口 server name file 文件路径 dmp full y 如 imp crm
  • HTML 常用快捷键,HTML介绍

    一 1 修改主题 2 3 修改 4 长代码换行 file setting general wrap 对勾选中 5 新建项目 file new project 6 关联浏览器 file setting tool web borther 复制路
  • bigdata_git版本控制系统

    一丶版本控制系统发展 集中式VCS 分布式VCS git 二丶git工作流程图 三丶分支管理 每个项目确立后可以添加多个分支 分支可以更新版本 只要分支没有合并提交 对其他人没有任何影响 这也是跟svn的不同 四丶内部数据存储方式 git统
  • 惠斯通电桥与运算放大器的输入失调电流和输入偏置电流

    在做数字开关气压表项目中 使用的气压传感器的结构是惠斯通电桥 输出差分信号 差分电压与气压大小成线性关系 运放的失调电压对精度影响很大 在这里考虑选择使用低漂移运放 在选择运放时考虑了输入电阻 失调电压的影响 如果运放的输入电阻大小与电桥电
  • 大模型训练避坑指南

    原文 https baijiahao baidu com s id 1760862056681517207 wfr spider for pc 自 2022 年 11 月底 ChatGPT 发布以来 大模型的热度持续发酵 相信高屋建瓴的讨论
  • 辛普森悖论_所谓的辛普森悖论

    辛普森悖论 We all know the Simpsons family from Disneyland but have you heard about the Simpson s Paradox from statistic theo
  • cdn缓存服务器有网站图片,CDN缓存服务器图片存储一致性hash算法的理解

    用hash做缓存 假如有三台服务器 1 2 3 有三万张图片 我想将图片平均缓存到我三台服务器上 一个服务器大概一万张 怎么去实现这个办法呢 可以用hash来取余数进行操作 加入我们是以图片的名字作为key进行hash计算 hash 图片名
  • C - 滑动窗口 /【模板】单调队列

    Description 有一个长为 n 的序列 a 以及一个大小为 k 的窗口 现在这个从左边开始向右滑动 每次滑动一个单位 求出每次滑动后窗口中的最大值和最小值 例如 The array is 1 3 1 3 5 3 6 7 and k