双端队列deque容器:

关于deque最常用的有这几个函数:

都是成员函数

双端队列模板题:【洛谷】P2952 [USACO09OPEN]牛线Cow Line

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<deque>
using namespace std; int n, cnt;
deque<int> q; int main() {
scanf("%d\n", &n);
char s[];
for(int i=; i<=n; ++i) {
gets(s);
if(s[] == 'A')
if(s[] == 'L') q.push_front(++cnt);
else q.push_back(++cnt);
if(s[] == 'D') {
int m = , j = ;
while(s[j]<'' || s[j]>'') ++j;
while(s[j]>='' && s[j]<='')
m = (m << ) + (m << ) + s[j] - , ++j;
while(m--) {
if(s[] == 'L') q.pop_front();
else q.pop_back();
}
} }
deque<int>::iterator it;
for(it=q.begin(); it!=q.end(); ++it)
printf("%d\n", *it);
}

P2952 [USACO09OPEN]牛线Cow Line

单调队列deque容器实现:

设一个数组a,可以修改某一个元素的值,求a中所有元素的最小(大)值

每次从头扫到尾的时间复杂度O(n2)太高了,st表虽然是O(1)查询但不支持修改

可以使用线段树O(n log2 n)来做但复杂度还是不够优秀,常数还大

单调队列登场了:

每次加入双端队列尾一个元素num时,从队尾将队列中所有比num大的元素都pop出去,再push_back(num)

这样就能实现单调队列了。

单调队列模板题:【洛谷】P1440 求m区间内的最小值

 #include<iostream>
#include<cstdio>
#include<algorithm>
#include<deque>
using namespace std; const int MAXN = + ; int n, m;
int a[MAXN];
deque<int> q; inline int read() {
int x=, f=; char ch=getchar();
while(ch<'' || ch>'') {
if(ch == '-') f = -;
ch = getchar();
}
while(ch>='' && ch<='')
x=(x<<)+(x<<)+ch-, ch=getchar();
return x * f;
} int main() {
n = read(), m = read();
for(int i=; i<=n; ++i) a[i] = read();
puts("");
for(int i=; i<n; ++i) {
if(i>m && q.front()==a[i-m]) q.pop_front();
while(!q.empty() && q.back()>a[i]) q.pop_back();
q.push_back(a[i]);
printf("%d\n", q.front());
}
}

P1440 求m区间内的最小值

单调队列优化DP:

在用单调队列优化DP的时候,每次除维护序列的单调性外,还需要把队首已经没有用的元素pop_front()掉

能够用单调队列优化的DP一般都长成这个样子:

  f[i] = max/min{f[k]} + ...

  1 ≤ k < i

而优化的其实是求最值的过程:将O(n)优化到了O(1).

【模板】deque实现单调队列的更多相关文章

  1. POJ 2823 Sliding Window​ (模板题)【单调队列】

    <题目链接> <转载于>>> > 题目大意: 给你一段序列和一个长为k的窗口,这个窗口从最左边逐渐向右滑,直到滑到最右边,问你,该窗口在滑动的过程中,最大值和 ...

  2. 题解【洛谷P1886】滑动窗口 /【模板】单调队列

    题面 单调队列模板题. 单调队列可以从队首和队尾出队. 队列中的元素大小具有一定的顺序. 具体可参考这一篇题解 #include <bits/stdc++.h> #define itn i ...

  3. P1886 P2216 单调队列模板

    何为单调队列? 单调队列是一个队列(废话) 而且必须同时满足下标单调和值单调两个单调特性. 跟优先队列不同,优先队列直接使用堆(heap)来实现,如何删去特定下标元素?不明. 本人喜欢用单调队列存下标 ...

  4. 计蒜客 A2232.程序设计:蒜厂年会-单调队列(双端队列(STL deque)实现)滑窗维护最小前缀和

    程序设计:蒜厂年会 问答问题反馈 只看题面 16.79% 1000ms 262144K   在蒜厂年会上有一个抽奖,在一个环形的桌子上,有 nn 个纸团,每个纸团上写一个数字,表示你可以获得多少蒜币. ...

  5. BZOJ 2096 Pilots - 单调队列STL(deque)

    传送门 分析: 单调队列:维护两个递增.递减的队列,每次都加入新元素并更新,如果最大值(递减队首)-最小值(递增队首) > k,那么将最左段更新为前面两者中较前的那一个,并弹掉.用deque可以 ...

  6. luoguP1886 滑动窗口(单调队列模板题)

    题目链接:https://www.luogu.org/problem/P1886#submit 题意:给定n个数,求大小为k的滑动窗口中最小值和最大值. 思路:单调队列模板题. AC代码: #incl ...

  7. Sliding Window POJ - 2823 单调队列模板题

    Sliding Window POJ - 2823 单调队列模板题 题意 给出一个数列 并且给出一个数m 问每个连续的m中的最小\最大值是多少,并输出 思路 使用单调队列来写,拿最小值来举例 要求区间 ...

  8. P1886 滑动窗口 /【模板】单调队列 方法记录

    原题链接 滑动窗口 /[模板]单调队列 题目描述 有一个长为 \(n\) 的序列 \(a\),以及一个大小为 \(k\) 的窗口.现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最 ...

  9. 模板 RMQ问题ST表实现/单调队列

    RMQ (Range Minimum/Maximum Query)问题是指: 对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n),返回数列A中下标在i,j里的最小(大)值,R ...

随机推荐

  1. 【转】Java高并发,如何解决,什么方式解决

    原文地址:https://www.cnblogs.com/lr393993507/p/5909804.html 对于我们开发的网站,如果网站的访问量非常大的话,那么我们就需要考虑相关的并发访问问题了. ...

  2. 【转】Apache服务器的下载与安装

    PHP的运行必然少不了服务器的支持,何为服务器?通俗讲就是在一台计算机上,安装个服务器软件,这台计算机便可以称之为服务器,服务器软件和计算机本身的操作系统是两码事,计算机自身的操作系统可以为linux ...

  3. shell与expect结合使用

    在linux操作系统下,使用脚本自动化,一般由两种方案,方案一:telnet+ftp,方案二:ssh+scp+expect. 以下主要使用ssh+scp+expect为例进行说明使用方式. 第一步:安 ...

  4. Java的Collection.sort()方法

    Java中的Collection.sort()方法能使用泛型对对象的变量进行排序,下面是两种方法. 文件名:student.java import java.util.*; import com.su ...

  5. PyCharm 自定义模版

    PyCharm 自定义模板 创建一个新的模板: 点击 Preferences... 选项或者按下快捷键 Command(⌘) + , 打开设置对话框. 找到 在 Editor 下的 File and ...

  6. OG数据预处理

    1.影像处理        ogCalcExtent --srs EPSG:26711 --inputdir D:/software/preprocess/data/bugaboos/ --filet ...

  7. FineReport中树数据集如何实现组织树报表

    组织树报表中由id与父id来实现组织树报表,若层级数较多时,对每个单元格设置过滤条件和形态会比较繁琐,因此FineReport提供了一种特殊的数据集——树数据集,只需要简单的设置就能自动递归出层级,方 ...

  8. Flutter TabBar

    先看一下Tab的构造方法: TabBar({ Key key, @required this.tabs, this.controller, this.isScrollable: false, this ...

  9. vue项目部署上线

    前言 今天把自己写的demo登录写完了,就想着试着走一下部署上线的流程.参考了很多的文档,终于成功进行了部署.在这里将服务器的搭建和vue项目的 部署上线进行整理(都是基础的知识,希望对大家有帮助.对 ...

  10. redis介绍(5)主从复制

    redis的主从复制: 主从复制介绍:redis的主从复制情况下,一个master节点下可以有多个slave节点,而且每个slave节点又可以有很多slave节点,形成很大的集群量级,我简单画个图,如 ...