POJ-2823 单调队列的初学习
来源:互联网 发布:腹部脂肪如何减 知乎 编辑:程序博客网 时间:2024/05/19 18:15
点击打开链接
创建一个单调递增或是单调递减队列,队首储存的一定是最大或是最小的元素。
#include <iostream>#include <cstdio>#include <queue>#include <cmath>#include <algorithm>using namespace std;int a[1000005];int que[1000005];int n,m;void min_que(){int head,tail;head=1;tail=0;for(int i=1;i<=m;i++){while(head<=tail&&a[que[tail]]>=a[i]){tail--;}tail++;que[tail]=i;}for(int i=m;i<=n;i++){while(head<=tail&&a[que[tail]]>=a[i]){tail--;}tail++;que[tail]=i;while(que[head]<i-m+1){head++;}printf("%d",a[que[head]]);if(i==n){printf("\n");}else{printf(" ");}}}void max_que(){int head,tail;head=1;tail=0;for(int i=1;i<=m;i++){while(head<=tail&&a[que[tail]]<=a[i]){tail--;}tail++;que[tail]=i;}for(int i=m;i<=n;i++){while(head<=tail&&a[que[tail]]<=a[i]){tail--;}tail++;que[tail]=i;while(que[head]<i-m+1){head++;}printf("%d",a[que[head]]);if(i==n){printf("\n");}else{printf(" ");}}}int main(){while(~scanf("%d%d",&n,&m)){for(int i=1;i<=n;i++){scanf("%d",&a[i]);}min_que();max_que();}return 0;}
0 0
- POJ-2823 单调队列的初学习
- Poj 2823 (单调队列)
- poj 2823【单调队列】
- POJ 2823 单调队列
- POJ-2823单调队列
- POJ 2823 单调队列
- poj 2823 单调队列
- 单调队列 POJ 2823
- poj 2823 单调队列
- POJ 2823 单调队列
- poj 2823 单调队列
- poj 2823 单调队列
- POJ 2823 单调队列
- poj 2823 单调队列
- POJ 2823 单调队列
- POJ 2823 //单调队列
- POJ 2823 单调队列
- poj 2823 单调队列
- Swift学习笔记之类型安全和推导
- 网络公开课
- H.264-AVC视频编码原理及实现(二)
- freemarker自定义标签报错(八)
- H.264-AVC视频编码原理及实现(三)
- POJ-2823 单调队列的初学习
- AAC ADTS格式分析
- trie树(字典树)
- H.264-AVC视频编码原理及实现(四)
- C++ class的各种sizeof
- Andrion之MVC模式
- JSP9个隐含对象
- H.264-AVC视频编码原理及实现(五)
- mysql游标循环的使用