news 2026/7/8 21:49:59

算法竞赛备考冲刺必刷题(C++) | 洛谷 P1886 单调队列

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
算法竞赛备考冲刺必刷题(C++) | 洛谷 P1886 单调队列

本文分享的必刷题目是从蓝桥云课洛谷AcWing等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。

欢迎大家订阅我的专栏:算法题解:C++与Python实现!

附上汇总贴:算法竞赛备考冲刺必刷题(C++) | 汇总


【题目来源】

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

【题目描述】

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

例如,对于序列 [1,3,−1,−3,5,3,6,7] 以及 k=3,有如下过程:

【输入】

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

【输出】

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

【输入样例】

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

【输出样例】

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

【算法标签】

《洛谷 P1886 单调队列》 #模拟# #线段树# #单调队列# #队列#

【代码详解】

#include<bits/stdc++.h>usingnamespacestd;constintN=1000006;inta[N],q[N];// a: 输入数组, q: 单调队列(存储下标)intn,k;// n: 数组长度, k: 滑动窗口大小intmain(){cin>>n>>k;// 读入n和k// 读入数组for(inti=1;i<=n;i++)cin>>a[i];// 第一部分:维护窗口最小值inth=1,t=0;// h: 队头指针, t: 队尾指针, 初始队列为空for(inti=1;i<=n;i++){// 维护队列单调递增// 当队列非空且队尾对应的值 >= 当前值时,弹出队尾while(h<=t&&a[q[t]]>=a[i])t--;// 将当前下标加入队尾q[++t]=i;// 如果队头元素已经不在当前窗口内,弹出队头if(q[h]<i-k+1)h++;// 当窗口形成时(i >= k),输出当前窗口的最小值if(i>=k)cout<<a[q[h]]<<" ";}cout<<endl;// 第二部分:维护窗口最大值h=1,t=0;// 重置队列for(inti=1;i<=n;i++){// 维护队列单调递减// 当队列非空且队尾对应的值 <= 当前值时,弹出队尾while(h<=t&&a[q[t]]<=a[i])t--;// 将当前下标加入队尾q[++t]=i;// 如果队头元素已经不在当前窗口内,弹出队头if(q[h]<i-k+1)h++;// 当窗口形成时(i >= k),输出当前窗口的最大值if(i>=k)cout<<a[q[h]]<<" ";}cout<<endl;return0;}
// 使用acwing模板二刷#include<bits/stdc++.h>usingnamespacestd;constintN=1000005;intn,k,a[N],q[N];// a: 输入数组, q: 单调队列(存储下标)intmain(){cin>>n>>k;// 读入数组长度和窗口大小// 读入数组元素for(inti=1;i<=n;i++)cin>>a[i];// 第一部分:求滑动窗口最小值inthh=0,tt=-1;// 队列初始化: hh-队头, tt-队尾, 空队列时hh>ttfor(inti=1;i<=n;i++){// 1. 维护窗口范围: 如果队头元素不在窗口内,弹出队头if(hh<=tt&&q[hh]<i-k+1)hh++;// 2. 维护队列单调性: 保持队列单调递增while(hh<=tt&&a[q[tt]]>=a[i])tt--;// 3. 当前下标入队q[++tt]=i;// 4. 当窗口形成时,输出当前窗口最小值(队头元素)if(i>=k)cout<<a[q[hh]]<<" ";}cout<<endl;// 第二部分:求滑动窗口最大值hh=0,tt=-1;// 重置队列for(inti=1;i<=n;i++){// 1. 维护窗口范围if(hh<=tt&&q[hh]<i-k+1)hh++;// 2. 维护队列单调性: 保持队列单调递减(求最大值)while(hh<=tt&&a[q[tt]]<=a[i])tt--;// 3. 当前下标入队q[++tt]=i;// 4. 当窗口形成时,输出当前窗口最大值(队头元素)if(i>=k)cout<<a[q[hh]]<<" ";}cout<<endl;return0;}

【运行结果】

8 3 1 3 -1 -3 5 3 6 7 -1 -3 -3 -3 3 3 3 3 5 5 6 7
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/1 9:27:16

BiliTools终极指南:2026年最完整的B站资源下载解决方案

BiliTools终极指南&#xff1a;2026年最完整的B站资源下载解决方案 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱&#xff0c;支持视频、音乐、番剧、课程下载……持续更新 项目地址: https://gitcode.com/GitHub_Trending/bilit/Bil…

作者头像 李华
网站建设 2026/7/8 20:55:16

OCR识别云服务:基于CRNN的SaaS平台搭建

OCR识别云服务&#xff1a;基于CRNN的SaaS平台搭建 &#x1f4d6; 项目背景与技术选型动因 在数字化转型加速的今天&#xff0c;OCR&#xff08;光学字符识别&#xff09;技术已成为信息自动化处理的核心工具之一。从发票报销、证件录入到文档归档&#xff0c;OCR能够将图像中的…

作者头像 李华
网站建设 2026/7/1 9:27:19

双倍效率:Z-Image-Turbo+OpenVINO云端加速全攻略

双倍效率&#xff1a;Z-Image-TurboOpenVINO云端加速全攻略 如果你是一名算法工程师&#xff0c;正在为Z-Image-Turbo在Intel平台上的推理速度优化而头疼&#xff0c;那么这篇文章正是为你准备的。我们将详细介绍如何利用预集成OpenVINO的优化环境&#xff0c;跳过繁琐的交叉编…

作者头像 李华
网站建设 2026/7/1 9:27:21

一键切换:用阿里通义Z-Image-Turbo WebUI快速比较不同风格模型

一键切换&#xff1a;用阿里通义Z-Image-Turbo WebUI快速比较不同风格模型 作为一名艺术研究者&#xff0c;你是否经常需要对比不同AI模型生成的艺术风格差异&#xff1f;传统方法每次切换模型都需要复杂的配置过程&#xff0c;从安装依赖到调整参数&#xff0c;耗时又费力。今…

作者头像 李华
网站建设 2026/7/2 3:02:12

文字秒变CAD图纸:AI设计工具让机械制图零门槛

文字秒变CAD图纸&#xff1a;AI设计工具让机械制图零门槛 【免费下载链接】text-to-cad-ui A lightweight UI for interfacing with the Zoo text-to-cad API, built with SvelteKit. 项目地址: https://gitcode.com/gh_mirrors/te/text-to-cad-ui 还在为复杂的CAD软件操…

作者头像 李华
网站建设 2026/7/1 20:02:07

HTML lang属性识别?OCR镜像可提取网页快照中的多语言文本

HTML lang属性识别&#xff1f;OCR镜像可提取网页快照中的多语言文本 &#x1f4d6; 项目简介 在现代Web应用与自动化数据采集场景中&#xff0c;从图像中精准提取结构化文本信息已成为一项关键能力。尤其在处理包含多语言内容的网页快照、截图或扫描文档时&#xff0c;传统方法…

作者头像 李华