poj 2823 Sliding Window (单调队列入门)
/*****************************************************************
题目: Sliding Window(poj 2823)
链接: http://poj.org/problem?id=2823
题意: 给一个数列,找所有连续k个数的最小值和最大值。
算法: 单调队列(入门)
*******************************************************************/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std; const int mx=;
struct Q
{
int x;
int id;
};
Q q[mx];
int a[mx]; int main()
{
int n,k;
while (~scanf("%d%d",&n,&k))
{
for (int i=;i<=n;i++) scanf("%d",&a[i]);
int h=,r=,i;
///初始化队列,这步一定要加
for (int i=;i<;i++) q[i].id=; ///先把前k个元素放入队列
for (i=;i<=k;i++)
{
while (r>=h&&q[r].x>a[i]) r--; ///保证队列中元素递增,虽然有些元素会覆盖,但覆盖的元素
///是不会输出的元素。
q[++r].x=a[i];
q[r].id=i;
} for (;i<=n;i++)
{
printf("%d ",q[h].x); ///由于队列只有k个元素,所以第一一定是最小的
while (q[h].id<=i-k) h++; ///删除一些元素,保证下标在i-k+1到i的元素在队列中
while (r>=h&&q[r].x>a[i]) r--;
q[++r].x=a[i];
q[r].id=i; }
printf("%d\n",q[h].x);
///最大值求法和最小值一样
for (int i=;i<;i++) q[i].id=;
h=,r=;
for (i=;i<=k;i++)
{
while (r>=h&&q[r].x<a[i]) r--;
q[++r].x=a[i];
q[r].id=i;
}
for (;i<=n;i++)
{
printf("%d ",q[h].x);
while (q[h].id<=i-k) h++;
while (r>=h&&q[r].x<a[i]) r--;
q[++r].x=a[i];
q[r].id=i;
}
printf("%d\n",q[h].x);
}
}
poj 2823 Sliding Window (单调队列入门)的更多相关文章
- POJ 2823 Sliding Window + 单调队列
一.概念介绍 1. 双端队列 双端队列是一种线性表,是一种特殊的队列,遵守先进先出的原则.双端队列支持以下4种操作: (1) 从队首删除 (2) 从队尾删除 (3) 从队尾插入 (4) ...
- POJ 2823 Sliding Window (单调队列)
单调队列 加了读入挂比不加更慢.... 而且这份代码要交c++ 有大神G++跑了700ms..... orzorzorz #include<iostream> #include<cs ...
- poj 2823 Sliding Windows (单调队列+输入输出挂)
Sliding Window Time Limit: 12000MS Memory Limit: 65536K Total Submissions: 73426 Accepted: 20849 ...
- POJ 2823 Sliding Window 题解
POJ 2823 Sliding Window 题解 Description An array of size n ≤ 106 is given to you. There is a sliding ...
- 洛谷P1886 滑动窗口(POJ.2823 Sliding Window)(区间最值)
To 洛谷.1886 滑动窗口 To POJ.2823 Sliding Window 题目描述 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口.现在这个从左边开始向右滑动,每 ...
- POJ 2823 Sliding Window(单调队列入门题)
Sliding Window Time Limit: 12000MS Memory Limit: 65536K Total Submissions: 67218 Accepted: 190 ...
- POJ 2823 UESTCoj 1221 Sliding Window 单调队列 经典入门题
题意:给出一个序列,求出每连续k个数字中最大的数和最小的数. 这是道单调队列裸题,直接写就行了. 本来用deque写出来后,发现在poj上硬是超时了,在discuss上看很多人也在抱怨超时的问题,据说 ...
- 题解报告:poj 2823 Sliding Window(单调队列)
Description An array of size n ≤ 106 is given to you. There is a sliding window of size k which is m ...
- POJ 2823 Sliding Window 【单调队列】
题目链接:http://poj.org/problem?id=2823 题目大意:给出一组数,一个固定大小的窗体在这个数组上滑动,要求出每次滑动该窗体内的最大值和最小值. 这就是典型的单调队列,单调队 ...
随机推荐
- ImageMagick Windows x64下的安装
在windows下安装ImageMagick时,安装的版本一定要跟php的插件是同一个的,包含vc++编译的版本. 我使用的是ImageMagick-6.9.3-7-Q16-x64-dll.exe 和 ...
- [solr] - 环境搭建2
前面使用Tomcat搭建solr,参考文章: http://www.cnblogs.com/HD/p/3977799.html 原来solr可以不使用tomcat/jboss等服务器,它自身已经集成了 ...
- angular+bootstrap+MVC--之一,入门
这篇直奔MVVM主题,本例实现一个bootstrap的下拉框. 展示了如下技术: 1.MVVM绑定(事件绑定,值绑定,循环绑定,循环绑定中嵌套事件并回传item), 2.angul多module, 建 ...
- Mybatis知识点总结
---恢复内容开始--- Mybatis知识点总结 1.#{}和${}的区别是什么? 答:#{}的使用场景:在表的sql映射文件中如下使用: <mapper namespace="co ...
- java反射学习笔记
1.java反射概念 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功 ...
- JavaScript中Math--random()/floor()/round()/ceil()
Math.random():返回0-1之间的任意数,不包括0和1: Math.floor(num):返回小于等于num的整数,相当于四舍五入的四舍,不五入:例子:Math.floor(1.0);Mat ...
- sql语句,怎么查看一个表中的所有约束
sql语句,怎么查看一个表中的所有约束,比如,一个student表,有唯一,外键,主键,用sql语句怎么查看student表中的所有约束呢? select * from sysobjects wher ...
- Linux经典书籍推荐
入门篇 <LINUX权威指南>书不错,写的很全面也比较广,涉及的不深,做为入门书籍不错,可以比较全面的了解linux .另外比较热门的也可以看看<鸟哥的私房菜>等书,偏管理类的 ...
- ios delegate你必须知道的事情
在我们的class中设计delegate的时候,我们通常会有几个注意事项. 假设我的class叫做MyClass,那我们可能会有定义一个MyClassDelegate这个protocol当作我的del ...
- ubuntu下python连接mysql
apt-get install python-mysqldb