POJ2823
来源:互联网 发布:随身带了淘宝去异界 编辑:程序博客网 时间:2024/06/06 08:55
这道题应该有三种解法
1:线段树
2:单调队列
3:ST算法
下面的代码是
#include <iostream>#include<stdio.h>using namespace std;struct elem{ int pos; int val;};elem maxqueue[1000005];elem minqueue[1000005];int maxn[1000005];int minn[1000005];int minhead,mintail;int maxhead,maxtail;int main(){ int n,k; scanf("%d%d",&n,&k); minhead=mintail=maxhead=maxtail=0; int i; int num; for(i=0;i<k;i++) { scanf("%d",&num); while(maxhead<maxtail&&maxqueue[maxtail-1].val<num) { maxtail--; } maxqueue[maxtail].val=num; maxqueue[maxtail].pos=i; ++maxtail; while(minhead<mintail&&minqueue[mintail-1].val>num) { mintail--; } minqueue[mintail].val=num; minqueue[mintail].pos=i; ++mintail; } int current=0; for(i=k;i<n;i++) { scanf("%d",&num); maxn[current]=maxqueue[maxhead].val; minn[current]=minqueue[minhead].val; //cout<<maxn[current]<<" "<<minn[current]<<endl; ++current; while(maxhead<maxtail&&i-maxqueue[maxhead].pos>=k) maxhead++; while(maxhead<maxtail&&maxqueue[maxtail-1].val<num) maxtail--; maxqueue[maxtail].val=num; maxqueue[maxtail].pos=i; maxtail++; while(minhead<mintail&&i-minqueue[minhead].pos>=k) minhead++; while(minhead<mintail&&minqueue[mintail-1].val>num) mintail--; minqueue[mintail].val=num; minqueue[mintail].pos=i; mintail++; } maxn[current]=maxqueue[maxhead].val; minn[current]=minqueue[minhead].val; current++; for(i=0;i<current;i++) { cout<<minn[i]<<" "; } cout<<endl; for(i=0;i<current;i++) { cout<<maxn[i]<<" "; } cout<<endl;}
0 0
- poj2823
- POJ2823
- poj2823
- poj2823
- POJ2823
- poj2823
- poj2823
- POJ2823
- poj2823
- POJ2823
- POJ2823
- poj2823(ST)
- poj2823(堆)
- poj2823 单调队列
- 单调队列 POJ2823
- 單調隊列::poj2823 Sliding Window
- poj2823 Sliding Window
- 单调队列 (POJ2823)
- 数据结构之树状数组
- 内存管理
- Android Project Butter分析
- tr1的正则表达式
- 均值滤波、中值滤波的matlab实现
- POJ2823
- 设置SVN忽略文件和目录(文件夹)
- 自适应网页设计(Responsive Web Design)
- 第2章数据库设计和ER模型
- hdu 5037 Frog (贪心)
- vim使用记录
- B-树和B+树的应用:数据搜索和数据库索引
- openCV学习笔记--cvSmooth函数
- Android Study Reference