初谈这个话题,相信许多人会有一种似有所悟,但又不敢确定的感觉。没错,这正是因为其中“单调”一词的存在,所谓单调是什么,学过函数的people都知道单调函数或者函数的单调性,直白一点说单调就是一直增或一直减。例如:1,3,5,9就是一个单调增数列,数列中不存在后一个数比前一个数小的现象。那么同样,在这里谈到的话题也有类似特点。
转载 2023-07-20 07:26:05
111阅读
239. Sliding Window Maximum581: https://leetcode.com/problems/shortest-unsorted-continuous-subarray/862: https://leetcode.com/problems/shortest-subarray-with-sum-at-least-k/  496:&
转载 2023-08-09 14:50:55
32阅读
  单调队列,顾名思义就是队中元素都是单调队列,它们即可以是单调递增,也可以是单调递减的,单调队列有着重要的应用。  通过几道经典题目来熟悉单调队列:  1.集合  若一个数x在集合中,则2x+1,3x+1也在集合中,已知开始1在集合中,求集合第n大的数字。  分析:如果用朴素的方法对付不了很大的数据,可以维护三个单调递增队列,一个队列保存集合中
单调队列是一种用来快速查询一段长度为n的数组的一部分的最大最小值的算法。它原理相对简单,且易于实现,并且时间复杂度是接近O(n)的,可以解决很多问题。下面以洛谷P1886滑动窗口 /【模板】单调队列为例来介绍单调队列的实现方法。先放上题目:题目描述有一个长为n例如:The array is 输入格式输入一共有两行,第一行有两个正整数输出格式输出共两行,第一行为每次窗口滑动的最小值第二行为
(文章目录) 前言 本文介绍单调栈和单调队列的使用,并且提供模板。 一、单调栈? 栈地到栈顶是单调增加或者单调减少的。 1.代码模板: //常见模型:找出每个数左边离它最近的比它大/小的数 //stk[0]是不存放元素的,stk[tt]存放栈顶元素 int tt = 0; for (int i = ...
转载 2021-07-25 00:33:00
670阅读
2评论
简单单调队列. 滑动窗口题解. 单调队列是一种基于deque,通过特定的维护方式使得结构内部具有单调性的算法.区别于单调栈,单调队列需要对队列的两端同时进行维护.我这样描述可能会使用单调队列算法的问题:该问题需要求出一个全局的/若干个局部的解,这个(些)解与一个区间/区间的两端相关.我发现有不少单调队列问题都有其它RMQ算法解法().这时候,单调队列是O
转载 2021-08-04 17:50:00
84阅读
2评论
题目代码如下:#include<iostream>using namespace std;const int N=1000010;int a[N],q[N];int main(){ int hh=0,tt=-1; int n,k; cin>>n>>k; for(int i=0;i<n;i++) cin&...
原创 2021-07-09 14:51:17
136阅读
单调队列是这样一个队列,队 31 3 -1 -3 5 3 6 7
原创 2023-05-31 14:56:08
58阅读
单调队列 单调队列单调栈两者功能相同,只是维护的时候不同。 我们从最简单的问题开始: 给定一个长度为N的整数数列a(i),i=0,1,...,N-1和窗长度k. 要求: f(i) = max{a(i-k+1),a(i-k+2),..., a(i)},i = 0,1,...,N-1 问题的另一种描述
转载 2017-09-19 02:02:00
81阅读
2评论
单调队列:是指队列中存在递增/递减。 这个在求Sliding Window的时候特别好用。 比如。需要求这一区间的最小值。 则只需维持一个递增队列,当存在比队列中更小的数字时,将队列中所有比这个数大的都pop出去。 如果用stl中的list来的话,不能使用二分法。来快速pop出。 所以还是使用数组来 ...
转载 2021-11-02 17:19:00
117阅读
2评论
从问题开始来展开。Poj 2823给定一个数列,从左至右输出每个长度为m的数列段内的最小数和最大数。数列长度:N<=106,m<=N暴力解很直观的一种解法,那就是从数列的开头,将窗放上去,然后找到这最开始的k个数的最大值,然后窗最后移一个单元,继续找到k个...
原创 2023-02-17 15:21:00
59阅读
最近几天接触了单调队列,还接触了单调栈,就总结一下。 其实单调队列,和单调栈都是差不多的数据类型,顾名思义就是在栈和队列上加上单调单调递增或者单调递减。当要入栈或者入队的时候,要和栈头或者队尾进行比较,满足单调的性质则入队入栈,否则将当前元素删去,直到满足单调性质。 那么问题来了,单调队列,和单调栈有什么用了。最普遍的最重要的作用就是起到优化的作用。当然我目前也只知道这个所用。
原创 2022-10-18 14:03:10
78阅读
单调栈可以方便(O(n))地求出一个数,左右第一个比它大/小的数的位置如何求----给一个序列  2,3,6,9,4,7,1我们先求左边第一个比它小的栈为空,a[S.top()]<a[1] 所以 l[1]=0,S.push(1)单调栈里存的是编号接下来a[S.top()]<a[2] 所以l[2]=S.top=1, S.push(1)同理但是到4的时候a[S.top()]&gt
原创 2022-07-05 10:01:52
62阅读
输入样例:53 4 2 7 5输出样例:-1 3 -1 2 2普通做法,时间复杂度O(n^2),可能会TLE#include <
原创 2022-06-15 10:52:57
151阅读
之前我们讲了 队列、栈 优先队列,本文看下单调队列单调栈。 单调队列 也许这种数据结构的你没听过,但他其实就是一个队列,只不过是用了巧妙的方法使得队列中的元素单调递增或单调递减。(当然,优先队列也可以求最值,只不过 JavaScript 语言没有原生支持,实现起来较麻烦) 单调队列解决什么问题? 给出数字数组 arr,比如他有 5 个元素,这时可能有 2 个操作: 插入新元素 删除已有元素
原创 2023-05-19 14:20:37
105阅读
单调栈板子题https://www.luogu.com.cn/problem/P5788#include <iostream>#include <stack>using
单调队列进阶1.维护矩形最值P2216 [HAOI2007]理想的正方形例子:a×ba\times ba×b的矩形中所有n×nn\times nn×n的正方形最值。先用单调队列预处理出所有(i,j)(i,j)(i,j)向左最大长度为nnn的最值。然后再用单调队列 一行一行的维护每行的最值。时间复杂度:O(ab)O(ab)O(ab)#include<bits/stdc++.h>using namespace std;typedef long long ll;typedef un
原创 2022-01-20 16:28:15
28阅读
浅谈单调队列 本篇随笔简单讲解一下算法竞赛中的一种数据结构—单调队列。 与浅谈单调栈是姐妹篇,同样需要前置知识...你得知道队列是啥,然后单调这个词啥意思。 一、单调队列的概念 单调队列。 就是前置知识加和。 单调+队列。 也就是说,对于这个单调队列来讲,队列中的元素是满足单调性的。 那么当然有单调
转载 2020-11-04 16:51:00
108阅读
2评论
肿么感觉自己最近越来越懒了。。。
原创 2023-04-19 02:30:27
33阅读
  • 1
  • 2
  • 3
  • 4
  • 5