WINDOW(单调队列的应用)

时间:2022-08-24 17:59:16

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

WINDOW(单调队列的应用)

你的任务是找出窗口在各位置时的 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 &plus; 单调队列

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

  2. poj 2823 Sliding Window &lpar;单调队列入门)

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

  3. POJ2823 Sliding Window&lpar;单调队列&rpar;

    单调队列,我用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 &lpar;单调队列)

    单调队列 加了读入挂比不加更慢.... 而且这份代码要交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&lpar;单调队列&rpar;

    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. IP地址转换成Long型数字的算法

    在应用程序开发中,涉及到IP地址的存储,大部分开发人员都将其存为String(或文本类型).能否将固定格式为m.n.x.y的IP地址转换成 Long型的数字呢?答案是肯定的.在数据库层面,可以直接将结 ...

  2. Swift不可变数组

    Objective-C编写了2个不同的类来区分不可变数组(NSArray)和可变数组(NSMutableArray): Swift通过使用常量和变量来区分不可变数组和可变数组. 只要将数组定义为常量, ...

  3. connect to a specific wifi network in Android programmatically

    http://*.com/questions/8818290/how-to-connect-to-a-specific-wifi-network-in-android-prog ...

  4. 怎样使用projectproperty sheet&lpar;&period;vsprops&rpar;来管理工程

    怎样使用projectproperty sheet(.vsprops)来管理工程 IDE:VS2005 前言 Project Property Sheet的意思是项目属性表,在大型项目中基本上都会使用 ...

  5. 崔庆才Python3网络爬虫开发实战电子版书籍分享

    资料下载地址: 链接:https://pan.baidu.com/s/1WV-_XHZvYIedsC1GJ1hOtw 提取码:4o94 <崔庆才Python3网络爬虫开发实战>高清中文版P ...

  6. 多态(instanceof)

    多态调用的三种格式 * A:多态的定义格式: * 就是父类的引用变量指向子类对象 父类类型 变量名 = new 子类类型(); 变量名.方法名(); * B: 普通类多态定义的格式 父类 变量名 = ...

  7. &lbrack;WPF&rsqb;为旧版本的应用添加触控支持

    之前做WPF开发时曾经遇到这样一个需求:为一个基于 .NET Framework 3.5开发的老旧WPF程序添加触控支持,以便于大屏触控展示. 接手之后发现这是一个大坑. 项目最初的时候完全没考虑过软 ...

  8. IDEA中如何配置Tomcat和项目?

    IDEA是我用的挺多的一款java代码编辑工具,对于刚接触这款软件的新手来说,配置项目是很麻烦的了,更别说配置服务器Tomcat了,那么通过我的教程大家一定觉得配置IDEA项目也是很轻松的事了.   ...

  9. IP地址后面斜杠加具体数字详解

    其实这种形式就是用CIDR(无类别域间路由选择,Classless and Subnet Address Extensions and Supernetting))的形式表示的一个网段,或者说子网. ...

  10. BZOJ1150:&lbrack;CTSC2007&rsqb;数据备份

    浅谈堆:https://www.cnblogs.com/AKMer/p/10284629.html 题目传送门:https://lydsy.com/JudgeOnline/problem.php?id ...