首页 > 其他分享 >单调队列

单调队列

时间:2024-01-27 14:44:19浏览次数:22  
标签:q1 q2 队列 back int 单调

单调队列其实是一个双端队列,可以从队首和队尾出队,但是只能在队尾入队。队列中的元素关系具有单调性。对于维护好的单调队列,队内元素是有序的,取出最大最小值的复杂度是 \(O(1)\),每个元素各进队列一次,出队一次,因此复杂度是 \(O(n)\)。单调队列是主要解决滑动窗口类问题的数据结构。

洛谷 : 单调队列模版

#include<iostream>
#include<algorithm>
#include<deque>
using namespace std;
const int N=1e6+5;
int a[N],n,k;
deque<int> q1,q2;	//单调队列
int main(){
	ios::sync_with_stdio(false);
	cin>>n>>k;
	for(int i=1;i<=n;i++)
		cin>>a[i];
	for(int i=1;i<=n;i++){	//维护最小值
		if(!q1.empty()&&i-q1.front()>=k) q1.pop_front();
		while(!q1.empty()&&a[q1.back()]>a[i]) q1.pop_back();
		q1.push_back(i);
		if(i>=k) cout<<a[q1.front()]<<" ";
	}
	cout<<endl;
	for(int i=1;i<=n;i++){	//维护最大值
		if(!q2.empty()&&i-q2.front()>=k) q2.pop_front();
		while(!q2.empty()&&a[q2.back()]<a[i]) q2.pop_back();
		q2.push_back(i);
		if(i>=k) cout<<a[q2.front()]<<" ";
	}
	cout<<endl;
	return 0;
}

标签:q1,q2,队列,back,int,单调
From: https://www.cnblogs.com/Death-Basic/p/17991408/monotonic-queue

相关文章

  • priority_queue简介与用法(优先队列)
    priority_queue简介与用法 一、简介 1.概念priority_queue是C++标准库中的一个容器适配器(containeradapter),用于实现优先队列(priorityqueue)的数据结构。优先队列是一种特殊的队列,其中的元素按照一定的优先级进行排序,每次取出的元素都是优先级最高的。它的底层实现通常使......
  • nodejs消费rabbitmq队列消息
    index.jsvaramqp=require('amqplib/callback_api');constMyConsume=require('./MyConsume');amqp.connect('amqp://name:password!@localhost:5672/vhost',function(error0,connection){if(error0){throwerror......
  • 线性表 - 栈和队列
    栈后进先出LIFO两种实现方式使用数组实现的叫静态栈使用链表实现的叫动态栈相关题目简单难度225.用队列实现栈https://leetcode.cn/problems/implement-stack-using-queues/classMyStack{  privateQueue<Integer>q1;  privateQueue<Integer>q2; ......
  • 单调栈
    leetcode739每日温度题意:给出一个数组,返回一个vectorans数组,其中ans[i]记录下一个温度更高的数字的下标。temperatures=[73,74,75,71,69,72,76,73]st=[]单调栈原理建议b站灵茶学习.C++逆序遍历版本classSolution{public:vector<int>dailyTemperatures(ve......
  • 【数据结构】72变的双端队列
    双端队列前言大家好,很高兴又和大家见面啦!!!在前面的篇章中,咱们详细介绍了队列这种新的数据结构,现在我们简单的回顾一下队列的三要素——数据的逻辑结构、数据的存储结构以及数据的运算。数据的逻辑结构队列的数据元素在逻辑上是呈现线性结构,也就是说队列也是一种线性表,只不过是一种......
  • 进程间通信(队列和生产消费模型)
    (一)引入(1)什么是进程间的通信IPC进程间通信(Inter-ProcessCommunication,IPC)是指两个或多个进程之间进行信息交换的过程它是一种计算机编程技术,用于在不同的进程之间共享数据和资源(2)如何实现进程间通信借助于消息队列,进程可以将消息放入队列中,然后由另一个进程从队列中取......
  • 双端队列(deque)--python
    Python中的双端队列(deque)是一种特殊的数据结构,它允许在队列的两端进行插入和删除操作12。双端队列可以看成栈和队列的结合3。在Python中,我们可以使用collections模块中的deque类来创建双端队列12。下面是一些常用的操作方法1:Python`fromcollectionsimportdeque`#创建一个......
  • 基于Redis的Stream类型的完美消息队列解决方案(全)
    1概述2追加新消息,XADD,生产消息3从消息队列中获取消息,XREAD,消费消息4消息ID说明5消费者组模式,consumergroup6Pending等待列表7消息转移8坏消息问题,DeadLetter,死信问题9信息监控,XINFO10命令一览11Stream数据结构,RadixTree,基数树12相关产品1概述Redis5.......
  • 优先队列
    数学数学-组合数学数学-数论数学-博弈论数学-线性代数数学-概率期望动态规划动态规划-优化动态规划-背包进阶动态规划-计数dp动态规划-图上dp数据结构数据结构-线段树进阶数据结构-平衡树数据结构-Trie数据结构-分块数据结构-莫队数据结构-点分治数据结构-......
  • 栈与队列解题报告
    刚考完试。重返oi!这次挂掉80pts20pts挂在T1,未考虑读的时候数字占多个字符,60pts挂在多测未清空上。T1https://www.luogu.com.cn/problem/P1981经典表达式求值。我这里采用了一种比较奇特的方法。我以每个加号为分界线。当我遍历到其中一个加号时,保证加号之前只有一个数。然......