/*****************************************************************
题目: 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 (单调队列入门)的更多相关文章

  1. POJ 2823 Sliding Window + 单调队列

    一.概念介绍 1. 双端队列 双端队列是一种线性表,是一种特殊的队列,遵守先进先出的原则.双端队列支持以下4种操作: (1)   从队首删除 (2)   从队尾删除 (3)   从队尾插入 (4)   ...

  2. POJ 2823 Sliding Window (单调队列)

    单调队列 加了读入挂比不加更慢.... 而且这份代码要交c++ 有大神G++跑了700ms..... orzorzorz #include<iostream> #include<cs ...

  3. poj 2823 Sliding Windows (单调队列+输入输出挂)

    Sliding Window Time Limit: 12000MS   Memory Limit: 65536K Total Submissions: 73426   Accepted: 20849 ...

  4. POJ 2823 Sliding Window 题解

    POJ 2823 Sliding  Window 题解 Description An array of size n ≤ 106 is given to you. There is a sliding ...

  5. 洛谷P1886 滑动窗口(POJ.2823 Sliding Window)(区间最值)

    To 洛谷.1886 滑动窗口 To POJ.2823 Sliding Window 题目描述 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口.现在这个从左边开始向右滑动,每 ...

  6. POJ 2823 Sliding Window(单调队列入门题)

      Sliding Window Time Limit: 12000MS   Memory Limit: 65536K Total Submissions: 67218   Accepted: 190 ...

  7. POJ 2823 UESTCoj 1221 Sliding Window 单调队列 经典入门题

    题意:给出一个序列,求出每连续k个数字中最大的数和最小的数. 这是道单调队列裸题,直接写就行了. 本来用deque写出来后,发现在poj上硬是超时了,在discuss上看很多人也在抱怨超时的问题,据说 ...

  8. 题解报告: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 ...

  9. POJ 2823 Sliding Window 【单调队列】

    题目链接:http://poj.org/problem?id=2823 题目大意:给出一组数,一个固定大小的窗体在这个数组上滑动,要求出每次滑动该窗体内的最大值和最小值. 这就是典型的单调队列,单调队 ...

随机推荐

  1. shell script练习

    执行脚本的几种方式: 1. sh a.sh 或者  bash a.sh  调用的是 /bin/bash 进程执行的,所以脚本不需要执行权限. 2. 直接使用绝对路径执行, /home/script/a ...

  2. main 方法,

    默认是设置是alt /   就是你打出main以后按(alt /)

  3. 天嵌E8卡片电脑USBWIFI驱动linux移植

    下载驱动:http://pan.baidu.com/s/1sjL0Axn The drivers can be downloaded from Ralink website, the present ...

  4. java日期比较,日期计算

    版权声明:本文为楼主原创文章,未经楼主允许不得转载,如要转载请注明来源. 都是常用的日期之间的比较方法,供以后参考. 热身:获取当前时间 SimpleDateFormat df = new Simpl ...

  5. [oracle] update和merge语句的几点写法

    1.update t2 set parentid=(select ownerid from t1 where t1.id=t2.id); 2. update tb_client_win_lost_re ...

  6. Linux下编译带x264的ffmpeg的配置方法,包含SDL2

    一.环境准备 ffmpeg下载:http://www.ffmpeg.org/download.html x264下载:http://download.videolan.org/x264/snapsho ...

  7. android 程序开机自启动

    今天遇到程序开机自启动,然后查了一下,很简单,就记录一下. 开机自启动,一般我们是开启启动一个广播,然后在广播里启动Activity或者别的服务. 我们要做的很简单,就是在AndroidManifes ...

  8. 新建jsp报错“The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path”

    今天新建jsp文件时,就报错“Visual Page Editor has experimental support for Windows 64-bit”,然后刚好stackoverflow上面有这 ...

  9. jexus

    Jexus web server V5.1 安装配置要点 一.Jexus简介:Jexus web server for linux 是一款基于.NET兼容环境,运行于Linux/unix操作系统之上, ...

  10. nohup输入密码后继续后台运行

    Linux/Unix 是真正的多用户,多任务.Linux 提供了 fg 和bg 命令,让你轻松调度正在运行的任务. 假设你发现前台运行的一个程序需要很长的时间,但是需要干其他的事情,你就可以用 Ctr ...