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 题目大意:给出一组数,一个固定大小的窗体在这个数组上滑动,要求出每次滑动该窗体内的最大值和最小值. 这就是典型的单调队列,单调队 ...
随机推荐
- jquery选择器之属性选择器
[attribute] 匹配指定属性名的所有元素 [attribute=value] 匹配给定的属性名是某个特定值的属性 [attribute!=value] 匹配给定的属性名不是某个特定值的属性 ...
- python之类的属性
class type(object) With one argument, return the type of an object. The return value is a type objec ...
- Morphia 学习一 注解
http://blog.csdn.net/liumm0000/article/details/7535858 生命周期方法注解(delete没有生命周期事件)@PrePersist save之前被调用 ...
- MyEclipse Spring 学习总结三 SpringMVC 表单处理
SpringMVC 表单处理的项目结构如下图所示: Student.java 文件 public class Student { private Integer age; private String ...
- nginx location各种修饰符的匹配优先级
这作为一个备份,方便查询,毕竟nginx的强大,必然有其复杂性! Location modifier Nginx allows you to define location blocks by spe ...
- gulp.js简单操作
一.安装gulp 1.深入设置任务之前,需先安装gulp: $ npm install gulp -g 2.这会将gulp安装到全域环境下,让你可以存取gulp的CLI.接著,需要在本地端的专案进行安 ...
- 网络--三种网络通讯方式及Android的网络通讯机制
Android平台有三种网络接口可以使用,他们分别是:java.net.*(标准Java接口).Org.apache接口和Android.net.*(Android网络接口).下面分别介绍这些接口的功 ...
- Code Igniter + PHP5.3 + SqlServer2008配置
1.配置apache+php5.3 2.配置sql server服务器,并允许远程连接. 3.去http://www.microsoft.com/en-us/download/details.aspx ...
- TEST设置
- centos之Haproxy 负载均衡学习笔记
HAProxy的特点是:1.支持两种代理模式:TCP(四层)和HTTP(七层),支持虚拟主机:2.能够补充Nginx的一些缺点比如Session的保持,Cookie的引导等工作3.支持url检测后端的 ...