单调队列算法是一种数据结构,主要用于解决滑动窗口类问题,即在一个长度为 nn 的序列中,求每个长度为 mm 的区间的区间最值。 单调队列算法的时间复杂度为 O(n)O(n),相比 O(n \log n)O(nlogn) 的ST表和线段树在此问题上具有更好的优势。单调队列基本思想是维护一个双向队列(deque),它的性质是队列的头部...
单调队列(Monotonic Queue): 单调队列是一个双端队列,支持在队列两端进行插入和删除操作。 单调队列的特点是队列中的元素按照一定的单调性排列,常用的有单调递增和单调递减。 在插入新元素时,如果新元素破坏了当前的单调性,则在队尾删除一部分元素,直到满足单调性要求。这样可以保证队列中的元素保持单调性。 单调队列...
单调队列是指:队列中元素之间的关系具有单调性,而且,队首和队尾在队列的基础上允许出队操作,但是入队还是限制于队尾。 单调队列依旧具有队列的基本特性FIFO(First In First Out) 单调队列按单调性分为两种:单调递增队列和单调递减队列。 单调递增队列:保证队列头元素一定是当前队列的最小值,用于维护区间的最小值。
1. 对于单调递增队列,设当前准备入队的元素为e,从队尾开始把队列中的元素逐个与e对比,把比e大或者与e相等的元素逐个删除,直到遇到一个比e小的元素或者队列为空为止,然后把当前元素e插入到队尾。 2. 对于单调递减队列也是同样道理,只不过从队尾删除的是比e小或者与e相等的元素。 (3)单调栈与单调队列 单调队...
直接枚举所有可能的区域将无法在规定时间内完成。因此,我们需要设计一个时间复杂度为O(n)的算法,这时单调队列(一种数据结构)就能发挥作用。具体步骤是:首先从左到右扫描,记录每个高度对应的右边界,然后从右到左扫描,记录每个高度的左边界。最后,比较这些左、右边界对,找出最大面积。
在一些场景中,需要这样一种数据结构:优先队列,功能不是先进先出,而是队前端一直是占权重最大的(如最大值或最小值),进入队列后依然要保持。每次弹入弹出都要保证队列单调性,即形成一个单调队列。 类似的功能也可以用大顶堆/小顶堆,采用完全二叉树数据结构来实现。不管是优先队列还是大顶堆,为便于理解,下文都只...
单调队列优化多重背包(pascal及翻译过去的C代码) 我最开始接触的相对高级的DP算法是从背包问题开始的。那是上学期新生赛的事,当时,在第二轮选拔赛中,有一道可能算是贪心算法的题,但是在我眼里却觉得这是一道背包问题。于是,我求助我们学校的大牛,问一下有什么关于背包算法的,而且比较容易让我弄懂的资料,最终他...
单调队列处理部分 我的代码采用双端队列dequedeque处理,较为简洁。 dequedeque存储位置编号 其中dequedeque中从队首到队尾,位置编号严格增加,该位置源状态dpdp源状态值严格减少; 处理位置ii(采用代码中变量意义)时,将还未处理的小于i+hi+h的位置依次入队尾(可能有些元素会被赶出队尾,因为它们不可能再被使用到),...
2023年第十四届蓝桥杯省赛C++C组 子矩阵 题解 题面:我们用图像去抽象这个过程:这个域的圈定很像一个滑块在一个范围内移动,然后求出域中的最大值和最小值,这很像滑动窗口这道题 这道题我们可用单调队列来处理滑块区域的最值 有所区别的是,滑动窗口这道题区间是一维的,而这题的区间是二维 那么有没有...
动态规划-单调队列优化动态规划 题集简介 单调队列优化动态规划是一种用于解决一类特定问题的动态规划优化技巧。它通常用于解决滑动窗口最值等问题,通过维护一个单调队列来减少状态转移的时间复杂度。 题目列表 题号标题解决/提交 2500 信息学奥赛一本通T1597-滑动窗口...