POJ 2823
来源:互联网 发布:php评论回复功能代码 编辑:程序博客网 时间:2024/06/08 12:09
【题意】给定一个大小已知的数组以及一个大小已知的滑动窗口,窗口每个时刻向后移动一位,求出每个时刻窗口中数字的最大值和最小值。
【分析】第一分单调队列优化的入门题,思路很简单,这里就是维护一个长度最长为k的递增和递减的单调队列!
【AC代码】
// cpp~//queue dp#include <queue>#include <cstdio>using namespace std;const int maxn = 1000005;struct node{ int val,pos; node(){} node(int val,int pos):val(val),pos(pos){}}que1[maxn],que2[maxn];int maxhead,maxtail,minhead,mintail;int maxans[maxn],minans[maxn];int num;int main(){ int n,k; scanf("%d%d",&n,&k); int cur=0; maxhead=0,maxtail=0; minhead=0,mintail=0; for(int i=0; i<k; i++){ scanf("%d",&num); // min while(minhead<mintail&&que1[mintail-1].val>=num) mintail--; que1[mintail] = node(num,i);mintail++; //max while(maxhead<maxtail&&que2[maxtail-1].val<=num) maxtail--; que2[maxtail] = node(num,i);maxtail++; } for(int i=k; i<n; i++){ minans[cur] = que1[minhead].val; maxans[cur] = que2[maxhead].val; cur++; scanf("%d",&num); //min while(minhead<mintail&&i-que1[minhead].pos>=k) minhead++; while(minhead<mintail&&que1[mintail-1].val>=num) mintail--; que1[mintail] = node(num,i);mintail++; //max while(maxhead<maxtail&&i-que2[maxhead].pos>=k) maxhead++; while(maxhead<maxtail&&que2[maxtail-1].val<=num) maxtail--; que2[maxtail] = node(num,i);maxtail++; } minans[cur] = que1[minhead].val; maxans[cur] = que2[maxhead].val; cur++; for(int i=0; i<cur; i++)printf("%d ",minans[i]); printf("\n"); for(int i=0; i<cur; i++)printf("%d ",maxans[i]); printf("\n"); return 0;}
1 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 Sliding Window
- poj 2823 Sliding Window
- Poj 2823 (单调队列)
- poj 2823【单调队列】
- 文章标题
- HTML5 入门介绍
- servlet图库
- IOS学习之——UItableviewCell单元格重用的实现方式
- UML基本内容
- POJ 2823
- WIN32汇编语言之通用对话框的使用
- iOS——地图
- android native proxy app debug
- ARM汇编伪指令
- NDK使用log模块
- Google Gallery for Android 4.4源码分析以及主UI修改——Gallery整体结构
- 苹果所有常用证书,appID,Provisioning Profiles配置说明及制作图文教程
- python中函数的总结之三