首页 > 其他分享 >洛谷题单指南-常见优化技巧-P1886 滑动窗口 /【模板】单调队列

洛谷题单指南-常见优化技巧-P1886 滑动窗口 /【模板】单调队列

时间:2024-09-09 16:13:21浏览次数:11  
标签:head P1886 洛谷题 入队 int tail 单调 队列 模板

原题链接:https://www.luogu.com.cn/problem/P1886

题意解读:单调队列模版题。

解题思路:

采用双端队列维护单调的序列,单调队列三部曲:

1、去头,当窗口内元素个数超过k,队头出队

2、去尾,当要加入的元素会破坏单调性,队尾出队

3、入队,将元素的下标存入队列

每一次入队后,队头元素即为窗口最值。

100分代码:

#include <bits/stdc++.h>
using namespace std;

const int N = 1000005;

int n, k;
int a[N];
int q[N], head , tail; //手写双端队列

int main()
{
    cin >> n >> k;
    for(int i = 1; i <= n; i++) cin >> a[i];
    head = 0, tail = -1; //初始化队头,队尾指针
    for(int i = 1; i <= n; i++)
    {
        //去头
        while(head <= tail && i - q[head] + 1 > k) head++;
        //去尾
        while(head <= tail && a[i] < a[q[tail]]) tail--;
        //入队
        q[++tail] = i;

        if(i >= k) cout << a[q[head]] << " ";
    }

    cout << endl;
    head = 0, tail = -1; //初始化队头,队尾指针
    for(int i = 1; i <= n; i++)
    {
        //去头
        while(head <= tail && i - q[head] + 1 > k) head++;
        //去尾
        while(head <= tail && a[i] > a[q[tail]]) tail--;
        //入队
        q[++tail] = i;

        if(i >= k) cout << a[q[head]] << " ";
    }
}

 

标签:head,P1886,洛谷题,入队,int,tail,单调,队列,模板
From: https://www.cnblogs.com/jcwy/p/18404788

相关文章

  • C++学习笔记(曾经我看不懂的代码2:基于范围的for循环、auto使用、stl容器、template模
    不知不觉c++程序设计:标准库已经看了一大半了,学到了很多,很多曾经在网上和在书上看到却看不懂的代码,在看完标准库中的大半内容以后,都能大致的理清代码的含义。代码模板一:for(auto&a:arr)1、基于范围的for循环:a为迭代变量,arr为迭代范围,&表示引用。写一个例子:#include<ios......
  • C++ 模板进阶知识——stdenable_if
    目录C++模板进阶知识——std::enable_if1.简介和背景基本语法使用场景2.`std::enable_if`的基本用法示例:限制函数模板只接受整数类型3.SFINAE和std::enable_if示例:使用SFINAE进行函数重载SFINAE的优点应用场景4.在类模板中使用std::enable_if示例:根据类型......
  • CRUD最佳实践PasteForm及项目模板的制作视频,让重复的CRUD更加简单直接[附带源码和视频
    关说不练假把式,在上一,二篇中介绍了我心目中的CRUD的样子基于之前的理念,我开发了一个命名为PasteTemplate的项目,这个项目呢后续会转化成项目模板,转化成项目模板后,后续需要开发新的项目就可以基于这个模板创建,这样就不要copy一个旧的项目,然后删删删,改改改,重命名等操作了强迫症,一......
  • 【生日视频制作】集装箱红色货车大卡车身AE模板AE模板修改文字软件生成器教程特效素材
    生日视频制作教程集装箱红色货车大卡车身AE模板修改文字特效广告生成神器素材祝福玩法AE模板工程怎么如何做的【生日视频制作】集装箱红色货车大卡车身AE模板AE模板修改文字软件生成器教程特效素材【AE模板】生日视频制作步骤:下载AE模板安装AE软件把AE模板导入AE......
  • C++ 模板类类型限定
    #include<iostream>#include<type_traits>usingnamespacestd;namespace{classIAnimal{public:virtualvoidsay()=0;};classDog:IAnimal{public:voidsay()override{......
  • ae软件_ae软件下载_完整版下载-AE模板 - AE2020软件包下载
    ae软件_ae软件下载_完整版下载-AE模板 - AE2020软件包下载...AE软件:从下载到精通的完全指南AdobeAfterEffects(简称AE)是一款功能强大的动态图形和视觉效果软件,广泛应用于电影、电视、广告等领域。无论你是初学者还是专业人士,掌握AE都能为你的创意作品增添无限可能。本文将为你详......
  • C++ 模板进阶知识——完美转发
    目录C++模板进阶知识——完美转发1.完美转发的步骤演绎完美转发的关键点2.std::forward2.1工作原理2.2重要性3.普通参数的完美转发4.在构造函数模板中使用完美转发范例5.在可变参数模板中使用完美转发范例5.1常规的在可变参模板中使用完美转发5.2将目标函数......
  • 【生日视频制作】F900xr宝马摩托车提车交车仪式AE模板修改文字软件生成器教程特效素材
    生日视频制作教程F900xr宝马摩托车提车交车仪式AE模板修改文字特效广告生成神器素材祝福玩法AE模板工程AE模板套用改图文教程↓↓:怎么如何做的【生日视频制作】F900xr宝马摩托车提车交车仪式AE模板修改文字软件生成器教程特效素材【AE模板】生日视频制作步骤:下载AE......
  • idea如何配置模板
    配置生成代码指令模板注:我们常用的有sout,main等指令第一步打开设置面板1)按如下操作2)或者Ctrl+Alt+S快捷键直接弹出第二步找Editor===>LiveTemplates如下图第三步创建模板步骤如下1)创建分组名字2)分组名字3)创建自己的模板4)编写自己的模板点击OK即可第......
  • C++ 模板基础知识——可变参数模板
    目录C++模板基础知识——可变参数模板1.可变参函数模板1.1基本含义1.2利用constexprif优化递归函数1.3关于constexprif的进一步理解1.4重载2.折叠表达式2.1一元左折(UnaryLeftFold)2.2一元右折(UnaryRightFold)2.3二元左折(BinaryLeftFold)2.4二元右折......