/*****************************************************************
题目: 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. 【linux】三十分钟学会AWK

    本文大部分内容翻译自我开始学习AWK时看到的一篇英文文章 AWK Tutorial ,觉得对AWK入门非常有帮助,所以对其进行了粗略的翻译,并对其中部分内容进行了删减或者补充,希望能为对AWK感兴趣的 ...

  2. NSIS使用记录

    ; 该脚本使用 HM VNISEdit 脚本编辑器向导产生 ; 安装程序初始定义常量 !define PRODUCT_NAME "" !define PRODUCT_VERSION ...

  3. 黄聪:Access-Control-Allow-Origin,JS跨域解决办法

    .htaccess添加下面代码: <IfModule mod_headers.c> Header add Access-Control-Allow-Origin "*" ...

  4. 黄聪:MySQL 按指定字段自定义列表排序

    问题描述 大家都知道, MySQL 中按某字段升序排列的 SQL 为 (以 id 为例, 下同): SELECT * FROM `MyTable` , , , ) ORDER BY `id` ASC ...

  5. spring java 获取webapp下文件路径

    spring java 获取webapp下文件路径 @RequestMapping("/act/worldcup_schedule_time/imgdownload") @Resp ...

  6. OAF_JDBC系列2 - 通过JDBC连接SQLSERVER数据库DriverManager.getConnection

    d try{          Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");          St ...

  7. std result_of

    #include <type_traits> auto call(const auto& f) -> typename std::result_of<decltype( ...

  8. gcc-常见命令和错误

      一:编译过程的4个阶段:预处理,编译,汇编,链接; 1:最常用的方式 gcc hello.c -o hello 2:预处理后停止编译 gcc -E hello.c -o hello.i(.i通常为 ...

  9. powerDesigner 报Unable to connect SQLState=08004 解决方法

    在使用PowerDesigner配置数据库连接(configure connections)的时候,点击Test connection之后弹出Unable to connect SQLState=08 ...

  10. JavaScript list 去重复

    function unique(arr) { var result = [], hash = {}; for (var i = 0, elem; (elem = arr[i]) != null; i+ ...