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

济南天桥区做网站的怎样做app推广

济南天桥区做网站的,怎样做app推广,wordpress的静态数据,所有网站的名字大全洛谷P1440 求m区间内的最小值 详解(单调队列优化) 题目描述 给定一个长度为n的序列,要求输出每个长度为m的连续子数组的最小值。若m>n则输出全0。 算法思路 暴力解法缺陷: 直接遍历每个窗口并遍历求最小值,时间…

洛谷P1440 求m区间内的最小值 详解(单调队列优化)

题目描述

给定一个长度为n的序列,要求输出每个长度为m的连续子数组的最小值。若m>n则输出全0。

算法思路

暴力解法缺陷
直接遍历每个窗口并遍历求最小值,时间复杂度为O(nm),当n=2e6时会超时。

单调队列优化
使用双端队列维护一个单调递增序列,队列中存储元素的下标,保证:

  1. 队列头部为当前窗口的最小值下标
  2. 队列中元素对应的值严格递增
  3. 当窗口滑动时,移除失效元素(超出窗口范围的下标)
代码详解(附修正与优化)
#include <bits/stdc++.h>
using namespace std;const int MAXN = 2e6 + 5;
int n, m;
int a[MAXN];       // 存储原始数组
int que[MAXN];      // 单调队列(存储下标)
int front = 0, rear = -1; // 队列指针int main() {ios::sync_with_stdio(false);cin >> n >> m;// 处理m>n的特殊情况if (m > n) {for (int i = 0; i < n; ++i) cout << "0\n";return 0;}for (int i = 1; i <= n; ++i) cin >> a[i];// 初始化队列(前m个元素)for (int i = 1; i < m; ++i) {while (rear >= front && a[que[rear]] >= a[i]) rear--;que[++rear] = i;}// 输出第一个窗口的最小值cout << a[que[front]] << "\n";// 滑动窗口处理后续元素for (int i = m; i <= n; ++i) {// 移除失效队首(超出窗口范围)while (rear >= front && que[front] <= i - m) front++;// 维护单调性(从队尾移除较大元素)while (rear >= front && a[que[rear]] >= a[i]) rear--;que[++rear] = i;// 输出当前窗口最小值cout << a[que[front]] << "\n";}return 0;
}
关键优化点说明
  1. 边界条件处理

    • 当m>n时直接输出全0(题目特殊要求)
    • 初始化时先处理前m-1个元素,避免初始窗口未形成时的越界访问
  2. 时间复杂度O(n)
    每个元素最多入队、出队各一次,总操作次数为O(n)

  3. 空间复杂度O(n)
    使用线性数组模拟双端队列,避免STL容器额外开销

算法执行流程示例

以输入 n=5, m=3,数组 [1,3,2,4,5] 为例:

  1. 初始化窗口[1,3,2]:队列存[1,3],最小值1
  2. 滑动到[3,2,4]:队列存[2,4],最小值2
  3. 滑动到[2,4,5]:队列存[2,4,5],最小值2
    最终输出:
1  
2  
2
注意事项
  1. 数组下标从1开始:避免处理0号元素的特殊情况
  2. 严格维护单调性:当新元素小于等于队尾元素时,必须弹出队尾
  3. 窗口有效性检查:每次滑动后需确保队首元素在窗口范围内
总结

本题通过单调队列将时间复杂度从O(nm)优化至O(n),核心思想是:

  • 维护一个随时可获取最小值的"滑动窗口"
  • 通过队列的单调性保证最小值始终在队首
  • 及时清理失效元素(超出窗口范围或被更大元素覆盖)

此算法是滑动窗口类问题的经典解法,可推广至求最大值、中位数等变种问题。

http://www.dtcms.com/a/515248.html

相关文章:

  • 建设河南网站外贸网站建设盲区
  • 运维逆袭志·第4期 | 安全风暴的绝地反击 :从告警地狱到智能防护
  • Java-集合求差集,如果B集合中的id在A集合中存在就移除,如果不在就返回A集合
  • 微服务即时通讯系统——整体架构和组件(1)
  • WPF入门
  • WPF布局控件(界面骨架核心)
  • WPF 常用样式属性及示例笔记
  • 【WPF】自定义颜色拾取器
  • MahApps.Metro WPF 开发使用过程中遇到的问题 - 未能加载文件或程序集“Microsoft.Xaml.Behaviors,
  • 【普中Hi3861开发攻略--基于鸿蒙OS】-- 第 26 章 WIFI实验-AP 建立网络
  • ARM架构深度解析:ARMv7、ARMv8、ARMv9的技术演进、芯片实现与未来展望
  • 线下剧本杀预约小程序核心功能玩法解析:轻量化载体重构娱乐消费生态
  • 【矩阵分析与应用】【第8章 特征分析】【8.3 凯莱-哈密顿定理求解矩阵高次幂详解】
  • 合肥制作企业网站免费收录网站推广
  • 阿里云安装docker-compose
  • Centos 7 :VMware Tools 启动脚本未能在虚拟机中成功运行
  • 基于vue的停车场管理系统
  • 短剧小程序系统开发:开启影视娱乐新纪元
  • 系统架构设计师备考第49天——数字孪生体云计算大数据技术
  • 阿里云渠道商:阿里云哪些功能很必要?
  • 鱼馆网站的前期策划网站审核备案 几天
  • 建设银行申请信用卡网站股权融资
  • 即刻创作:用 Trickle + GLM-4.6 API 构建互动小说创作工具
  • 标定系数为什么会存储在相机模组里面,在标定的时候,算法是在割草机的X3板上运行的啊?
  • windows系统安装wls/Ubuntu子系统教程
  • 【Linux】gcc/g++编辑器 初识动静态库 程序翻译过程
  • AI服务器工作之系统下查看硬件(ubuntu为例)
  • 基于python智慧医疗问答系统 知识图谱 Flask框架 数据可视化 neo4j图数据库 计算机专业 优秀项目(源码)✅
  • P3957 [NOIP 2017 普及组] 跳房子
  • 日语学习-日语知识点小记-构建基础-JLPT-N3阶段-二阶段(6):文法運用