给你一个长度为 N 的数组,一个长为 K 的滑动的窗体从最左移至最右端,
你只能见到窗口的K个数,每次窗体向右移动一位,如下表:

你的任务是找出窗口在各位置时的 max value,min value.

INPUT:

第 1 行 n,k,

20%:n<=500;  
50%:  n<=100000;
100%:  n<=1000000;
第 2 行为长度为 n 的数组

8 3
1 3 -1 -3 5 3 6 7

OUTPUT:

2 行,
第 1 行每个位置的 min value,
第 2 行每个位置的 max value

-1 -3 -3 -3 3 3
3 3 5 5 6 7

题解:

如果每次都要sort的话,小数据可以O(n*k),但是数据大的话一定会超时。

那么该如何搞呢?  单调队列。O(n)效率很高!!

单调队列,一个元素单调的队列,可以保证队头是最小(最大)的;

可以通过队首删除,队尾插入来维护最优值。

这道题,就是通过单调队列来维护一个最大值和最小值。

代码:

 #include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<string>
#include<algorithm>
#include<queue>
#include<cstdlib>
#include<iomanip>
#include<ctime>
using namespace std;
const int maxn=;
int n,k;
int a[maxn],q[maxn];
int tail=,head=; int main()
{
cin>>n>>k;
for(int i=;i<=n;i++)
cin>>a[i];
q[tail]=;
for(int i=;i<k;i++)
{
while(a[i]<a[q[tail]]&&tail>=head)
{
tail--;
}
q[++tail]=i;
}
for(int i=k;i<=n;i++)
{
if(i-q[head]==k) head++;
while(a[i]<a[q[tail]]&&tail>=head)
{
tail--;
}
q[++tail]=i;
cout<<a[q[head]]<<" ";
}
cout<<endl;
memset(q,,sizeof(q));
head=,tail=;
q[tail]=;
for(int i=;i<k;i++)
{
while(a[i]>a[q[tail]]&&tail>=head)
{
tail--;
}
q[++tail]=i;
}
for(int i=k;i<=n;i++)
{
if(i-q[head]==k) head++;
while(a[i]>a[q[tail]]&&tail>=head)
{
tail--;
}
q[++tail]=i;
cout<<a[q[head]]<<" ";
}
cout<<endl;
return ;
}

WINDOW(单调队列的应用)的更多相关文章

  1. POJ 2823 Sliding Window + 单调队列

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

  2. poj 2823 Sliding Window (单调队列入门)

    /***************************************************************** 题目: Sliding Window(poj 2823) 链接: ...

  3. POJ2823 Sliding Window(单调队列)

    单调队列,我用deque维护.这道题不难写,我第二次写单调队列,1次AC. -------------------------------------------------------------- ...

  4. POJ 2823:Sliding Window 单调队列

    Sliding Window Time Limit: 12000MS   Memory Limit: 65536K Total Submissions: 48930   Accepted: 14130 ...

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

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

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

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

  7. poj2823Sliding Window——单调队列

    题目:http://poj.org/problem?id=2823 单调队列模板. 代码如下: #include<iostream> #include<cstdio> usin ...

  8. 【t019】window(单调队列)

    Time Limit: 2 second Memory Limit: 256 MB [问题描述] 给你一个长度为N 的数组,一个长为K的滑动的窗体从最左移至最右端,你只能见到窗口的K个数,每次窗体向右 ...

  9. POJ2823 Sliding Window (单调队列)

    POJ2823 Sliding Window Time Limit: 12000MS   Memory Limit: 65536K Total Submissions: 38342   Accepte ...

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

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

随机推荐

  1. Win环境下的文件读写

    在win环境下,有许多方法可以对文件进行读写操作,如MFC 中的CFile类,及一些开源的项目如QT中的QFile.开源的好得是可以多平台,而MFC只是微软自家的东西,对于想写跨平台的人,最好不用MF ...

  2. Plupload上传组件 + javaweb实现上传源码以及DEMO

    Plupload 是一个Web浏览器上的界面友好的文件上传模块,可显示上传进度.图像自动缩略和上传分块.可同时上传多个文件: 上网找了很多Plupload的DEMO都无法正常使用, 而且Pluploa ...

  3. VM virtuaBox异常关机启动不了的解决方案

    事件回放 我的物理机是win7,上面装了一个VM virtualBox,用来装Centos,有天物理机非正常关闭,导致VM virtuaBox异常关机启动不了,如下: 确实找不到这个vm_liang. ...

  4. 在Win7 64位操作系统下安装Oracle 10g

    参见网址http://www.cnblogs.com/newstar/archive/2010/12/01/1878026.html 1.下载安装程序,可以到这个网址去下载 http://www.or ...

  5. ov5648摄像头调试

    工作平台:MTK8389 sensor:ov5648 今天调试这颗摄像头的心得就是:首先得把上电时序弄对,I2C才能通讯,然后就是ID都要写对.

  6. ldap + kerberos 整合

    第一部分:ldap1. 安装ldap yum install -y openldap openldap-clients openldap-servers openldap-devel 2. 配置lda ...

  7. JS总结 运算符 条件语句

    算术运算符+-*/ 与数学计算一致,配合()号进行各种计算 另外,+号还可以达到连接的作用.例如: var a = 15; alert("a的值等于"+a); 前后增减量运算符: ...

  8. 简述UIViewControl之间的七种传值方式~~~

    将自己学习到的UIViewControl之间传值的几种方式在这里做一下总结,希望童鞋们多多支持哈--- 一.正向传值方式 这种方式传值应该是最简单的方式,我们先来建立两个视图控制器暂且称为OneVie ...

  9. NSIS 让程序以管理权限运行

    用NSIS向导,制作安装包,会生成NSI扩展的脚本文件,按F9,即可以生成安装文件. 如果要以管理员权限运行,直接在nsi脚本中,添加RequestExecutionLevel admin Name ...

  10. 从service弹出系统级自定义提示框,可在任意页面弹出

    添加权限 <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> // 显示 ...