数据结构 - 单调队列
【数据结构】单调队列
繁凡さん
只想当个小透明,就图一乐^q^,希望可以做出一些微小的贡献(目前研究方向:自然语言处理、深度学习中的对抗攻击、元学习,欢迎大佬们来与我交流^0^)
展开
-
CF1407D Discrete Centrifugal Jumps(单调队列+DP)
第二个方式维护单减第三个方式维护单增while(utop && a[i] <= a[stk_up[utop]]) { if(a[i] != a[stk_up[utop]])f[i] = min(f[i], f[stk_up[utop - 1]] + 1); utop -- ;}#include<cstdio>#include<cstring>#include<iostream>#include<algori.原创 2020-10-06 22:22:44 · 256 阅读 · 0 评论 -
模板 - 单调队列
整理的算法模板合集: ACM模板目录单调队列单调队列求矩阵的和单调队列/*常见模型:找出滑动窗口中的最大值/最小值*/int hh = 0, tt = -1;for (int i = 0; i < n; i ++ ){ while (hh <= tt && check_out(q[hh])) hh ++ ; // 判断队头是否滑出窗口 while (hh <= tt && check(q[tt], i)) tt -- ;原创 2020-09-28 16:55:16 · 132 阅读 · 0 评论 -
解题报告:Fake Maxpooling(单调队列求矩阵的和)
我们不妨先把这个问题中二维的矩阵简化成一维的数列。那么现在的问题就变成了一个求连续的滑动窗口最值问题:给出一个长度为n的数列和一个长度为k(k<n)的窗口,记录滑动窗口位于每个位置下的下的最大值,求这些最大值和。如果我们先用单调队列,把每一列长度为k的滑动窗口的最大值先预处理出来,就像这样,先变成这么一个k*n的矩阵,然后再用一次单调队列,把每一行中长度为k的滑动窗口中的最大值求出来做一下累加,依旧是正解,但此时,解决这道题的时间复杂度已经被我们降到了O((n−k+1)∗k)O((n-k+1) * .原创 2020-08-02 17:14:05 · 488 阅读 · 0 评论 -
【题解】P1419 寻找段落(二分+单调队列)难度⭐⭐⭐★
P1419 寻找段落首先二分答案,即:二分最大平均值。我们将a全部减去mid,问题转化为判断是否存在一个长度在s~t范围内的区间它的和为正,如果有说明还有更大的平均值。用前缀和和单调队列维护。不会单调队列的点这里然后用单调队列求出sum[i]-min(sum[i-t]~sum[i-s]),然后判断是否大于0即可。#include<bits/stdc++.h>using ...原创 2020-02-29 21:40:50 · 480 阅读 · 1 评论 -
【数据结构】单调栈和单调队列 详解+例题剖析
一.入门P1440求m区间内的最小值题目描述一个含有n项的数列(n<=2000000),求出每一项前的m个数到它这个区间内的最小值。若前面的数不足m项则从第1个数开始,若前面没有数则输出0。输入:6 27 8 1 4 3 2输出:077113原创 2019-12-20 17:09:59 · 2982 阅读 · 2 评论