单调队列理解及应用
来源:互联网 发布:slam算法书籍 编辑:程序博客网 时间:2024/06/05 03:56
单调队列:队列中元素之间的关系具有单调性,队首和队尾都可以进行出队操作,只有队尾可以进行入队操作。
作用:对于维护好的单调队列,不断地向队列里入队元素,也不时地出队过老的元素(比如:超出区间范围),不定期的询问当前队列里的最优的元素。
维护:
1.队尾入队的时候,同单调栈维护单调性。
2.队头不满足要求(过时的)出队。
poj 2823
队尾维护单调队列,队头超出范围(即超出目前入队元素位置-k+1)元素出队。
code: 用 VC++ 提交
作用:对于维护好的单调队列,不断地向队列里入队元素,也不时地出队过老的元素(比如:超出区间范围),不定期的询问当前队列里的最优的元素。
维护:
1.队尾入队的时候,同单调栈维护单调性。
2.队头不满足要求(过时的)出队。
poj 2823
队尾维护单调队列,队头超出范围(即超出目前入队元素位置-k+1)元素出队。
code: 用 VC++ 提交
//#pragma comment(linker, "/STACK:102400000,102400000")#include <stdio.h>#include <string.h>#include <iostream>#include <algorithm>#include <vector>#include <queue>#include <stack>#include <set>#include <map>#include <string>#include <math.h>#include <stdlib.h>#include <time.h>using namespace std;typedef long long LL;const int N = 2000010;int n,m,a[N];int Mi[N],Mx[N];struct Node{ int id,val;}que[N];int main(){ scanf("%d%d",&n,&m); for(int i = 1; i <= n; i++) scanf("%d",&a[i]); // MI int head=1,tail=0; for(int i = 1; i <= n; i++) { while(head<=tail && que[tail].val>a[i]) tail--; while(head<=tail && que[head].id < i-m+1) head++; que[++tail].val = a[i]; que[tail].id = i; if(i >= m){ if(i != m) printf(" "); printf("%d",que[head].val); } } puts(""); head=1,tail=0; for(int i = 1; i <= n; i++) { while(head<=tail && que[tail].val<a[i]) tail--; while(head<=tail && que[head].id < i-m+1) head++; que[++tail].val = a[i]; que[tail].id = i; if(i >= m){ if(i != m) printf(" "); printf("%d",que[head].val); } } puts(""); return 0;}
阅读全文
0 0
- 单调队列理解及应用
- 单调栈理解及应用
- 单调队列的应用
- 单调队列应用
- 单调队列 及其应用
- 单调队列及其应用
- 单调队列的应用
- 单调队列的应用
- 单调队列优化dp 理解
- HDU3530 单调队列的应用
- 浅谈单调队列的应用
- 单调栈及应用
- 单调队列(单调栈)的理解(2) ---- poj3162体会
- 关于单调队列的个人理解
- 单调队列的实现与应用
- 单调队列或单调栈的学习及认识
- 单调栈及单调队列基础与运用
- 单调栈的理解和应用
- tomcat设置直接通过域名访问项目(不需要接 /项目名)
- 单调栈理解及应用
- git搭建到与idea整合
- GO语言相关
- source insight中注释_取注快捷键设置方法
- 单调队列理解及应用
- Vmalloc实现原理
- 文件的复制
- 文件的存取
- mrunit的问题
- POJ
- POJ
- SharePoint Online 设置网站集
- 5.2