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

NO.77十六届蓝桥杯备战|数据结构-单调队列|质量检测(C++)

  1. 什么是单调队列?
    单调队列,顾名思义,就是存储的元素要么单调递增要么单调递减的队列。注意,这⾥的队列和普通的队列不⼀样,是⼀个双端队列。
  2. 单调队列解决的问题
    ⼀般⽤于解决滑动窗⼝内最⼤值最⼩值问题,以及优化动态规划
P1886 滑动窗口 /【模板】单调队列 - 洛谷

![[Pasted image 20250408144122.png]]

窗⼝内最⼤值:
从左往右遍历元素,维护⼀个单调递减的队列:

  • 当前元素进队之后,注意维护队列内的元素在⼤⼩为k的窗⼝内;
  • 此时队头元素就是最⼤值。
    窗⼝内最⼩值:
    从左往右遍历元素,维护⼀个单调递增的队列:
  • 当前元素进队之后,注意维护队列内的元素在⼤⼩为k的窗⼝内;
  • 此时队头元素就是最⼩值
#include <bits/stdc++.h>
using namespace std;

const int N = 1e6 + 10;

int n, k;
int a[N];

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);

    cin >> n >> k;
    for (int i = 1; i <= n; i++) cin >> a[i];

    deque<int> q; //存下标
    //最小值,递增队列
    for (int i = 1; i <= n; i++)
    {
        while (q.size() && a[q.back()] >= a[i]) q.pop_back();

        q.push_back(i);

        //判断队列元素是否合法
        if (q.back() - q.front() + 1 > k) q.pop_front();
        
        if (i >= k) cout << a[q.front()] << " ";
    }
    cout << endl;

    //最大值,递减队列
    q.clear();
    for (int i = 1; i <= n; i++)
    {
        while (q.size() && a[q.back()] <= a[i]) q.pop_back();

        q.push_back(i);

        //判断队列元素是否合法
        if (q.back() - q.front() + 1 > k) q.pop_front();
        if (i >= k) cout << a[q.front()] << " ";
    }
    cout << endl;
    
    return 0;
}
P2251 质量检测 - 洛谷
#include <bits/stdc++.h>
using namespace std;

const int N = 1e6 + 10;

int n, m;
int a[N];

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);

    cin >> n >> m;
    deque<int> q;
    for (int i = 1; i <= n; i++) 
    {
        cin >> a[i];
        while (q.size() && a[q.back()] >= a[i]) q.pop_back();

        q.push_back(i);
        
        if (q.back() - q.front() + 1 > m) q.pop_front();

        if (i >= m) cout << a[q.front()] << endl;
    }

    return 0;
}

相关文章:

  • PG数据库中级证书含金量高吗
  • 鸿蒙NEXT开发资源工具类(ArkTs)
  • PHP+Vue 3实现增删改查(CRUD)
  • 网络安全小知识课堂(十二)
  • Java:学习进阶之路
  • 使用 JSON Schema 实现语言模型的结构化输出:跨平台实践指南
  • git clone(复制)下载
  • Nginx 499 错误的原因及解决方法
  • OpenCV--模板匹配
  • 使用Docker Desktop进行本地打包和推送
  • Kafka分区机制详解:原理、策略与应用
  • Docker+Jenkins+Gitee自动化项目部署
  • 详解 Redis repl_backlog_buffer(如何判断增量同步)
  • 2025年智能 ITSM产品推荐
  • Elasticsearch | ES索引模板、索引和索引别名的创建与管理
  • “图生生”AI生图优化升级,DeepSeek加持体验更优!
  • SAN及其ZONE
  • 【kind管理脚本-2】脚本使用说明文档 —— 便捷使用 kind 创建、删除、管理集群脚本
  • JavaScript学习教程,从入门到精通,JavaScript 数据类型详解(7)
  • 《AI开发工具和技能实战》专栏规划:从工具到应用的全链路指南
  • 旅游网站开发项目策划书/软文代写
  • asp.net做购物网站/免费seo优化工具
  • 电子商务网站建设的好处有哪些/网络优化需要哪些知识
  • 公司网站的设计与实现/长沙电商优化
  • 北京工商代办服务公司/关键词排名优化技巧
  • 河北网络公司网站建设/河北seo技术