Sliding Window (POJ - 2823,单调队列求区间最值)

单调队列与滑动窗口(Sliding window, poj2823) 单调队列,顾名思义,就是(严格)单调(递增或递减)的队列。下面以单调递减队列为例。 单调递减队列: 1.单调递减的队列,队首元素总是最大的。 2.元素只能从队尾入队,但可以从队尾或队首出队。若待入队的元素>=队尾元素,队尾元素出队,直到待入队的元素=窗口宽度,说明队首元素已不在窗内,队首元素出队。 3.单调队列有两个单调性:(1)元素的值是严格单调的,这里是严格单调递减;(2) 阅读详情

一.题目链接:

POJ-2823

二.题目大意:

有 n 个数,用一个窗口去扫描,窗口大小为 k.

求每次扫描得到的最小值与最大值.

三.分析:

单调队列 O(N)扫描即可.

又加深了自己对单调队列的理解.

四.代码实现:

#include <set>
#include <map>
#include <ctime>
#include <queue>
#include <cmath>
#include <stack>
#include <bitset>
#include <vector>
#include <cstdio>
#include <sstream>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#define eps 1e-8
#define lc k * 2
#define rc k * 2 + 1
#define pi acos(-1.0)
#define ll long long
#define ull unsigned long long
using namespace std;

const int M = (int)1e6;
const int mod = 99991;
const int inf = 0x3f3f3f3f;

int a[M + 5];
int q[M + 5];

/**
8 3
1 3 -1 -3 5 3 6 7
**/

int main()
{
    int n, k;
    scanf("%d %d", &n, &k);
    for(int i = 1; i <= n; ++i)
        scanf("%d", &a[i]);
    int l = 1, r = 1;
    q[1] = 0, a[0] = inf;
    for(int i = 1; i <= n + 1; ++i)
    {
        while(l <= r && q[l] < i - k)   l++;
        if(i > k)
            printf("%d%c", a[q[l]], i == n + 1 ? '\n' : ' ');
        while(l <= r && a[i] <= a[q[r]])    r--;
        q[++r] = i;
    }
    l = 1, r = 1;
    q[1] = 0, a[0] = -inf;
    for(int i = 1; i <= n + 1; ++i)
    {
        while(l <= r && q[l] < i - k)   l++;
        if(i > k)
            printf("%d%c", a[q[l]], i == n + 1 ? '\n' : ' ');
        while(l <= r && a[i] >= a[q[r]])    r--;
        q[++r] = i;
    }
    return 0;
}

 

[POJ2823]Sliding Window(单调队列)by_zgx优化最新版 我的博客链接:http://blog.youkuaiyun.com/CABI_ZGX 立即下载

相关推荐

时序分析28 - 时序预测 格兰杰因果关系(中) python实践1

时序分析28 - 时序预测 - 格兰杰因果关系(中) Python 实践 1 上一篇文章我们介绍了格兰杰因果关系的基本概念、背景以及相关统计检验法。本篇文章我们使用Python编程实践一下。 实践1:股票价格数据之间的格兰杰因果关系 问题:苹果公司今天的股价是否可以用来预测明天的特斯拉的股价? 数据:来自雅虎财经 import matplotlib.pyplot as plt import seaborn as sns import numpy as np import pandas as pd 读入数据

weixin_43171270的博客 8836

Sliding Window(单调队列)

Sliding Window Time Limit: 12000MS   Memory Limit: 65536K Total Submissions: 35975   Accepted: 10649 Case Time Limit: 5000MS Description An array of size n ≤ 106 is given to...

Simone chou... 182

【计算机图形学】Pov-Ray画的垃圾小车

效果: 代码: #include "colors.inc" #include "metals.inc" #include "glass.inc" //相机 //这个位置车子刚好落在草地上了 camera { location direction z*1.5 right x*image_width/image_height look_at

lishichengyan的博客 1749

【单调队列】Sliding Window

00

木又可可的博客 172

Hi3559AV100制作ext4文件系统和烧录emmc

1、首先生成所需文件系统,见本博客&lt;Hi3559AV100文件系统制作cramfs&gt;。 2、使用工具生成EXT4文件系统 ./make_ext4fs -s -l 96M rootfs_hi3559av100.ext4 ./rootfs 3、烧录文件系统 mw.b 0x82000000 ff 0x12C00000;tftp 0x82000000 STM_...

阿Sir问道 7034

工业界实战:小红书推荐系统中的AB测试策略解析——分层、Holdout与反转实验

本文深入解析了小红书推荐系统在工业界实践中采用的AB测试核心策略。重点阐述了分层实验如何解决多实验并行与干扰问题,Holdout机制如何作为评估黄金标准提供稳定基准,以及反转实验如何作为全量上线后的终极安全网进行风险控制。这些策略共同构成了科学、严谨的线上评估体系,是保障推荐系统迭代效果与决策质量的关键。

transformer2023的博客 477

Sliding Window(单调队列讲解与例题)

单调队列

OIER成长之路 772

ctfshow---sql注入(171-213)

这里提一句,为什么不直接替换成acb这种,因为,flag原本就有字母,还原的时候会全部都还原成数字的,数字替换成符号应该也是可以的,这边测试了下除了&#好像别的符号都可以。插入查询后查询语句就会变成这样,由于id=11111这是一个不存在的id,而后面1=1又为真,所以会查询到表内所有的内容,--+是注释后面的字符。因为接受username的时候没有用引号,所以接受单纯的数字,而数字和字符比较会转换类型,字符串会变成数字0进行比较,所以相等。

fainpo的博客 1320

G - Sliding Window (单调队列)

https://vjudge.net/contest/283317#problem/G An array of size n ≤ 10 6 is given to you. There is a sliding window of size k which is moving from the very left of the array to the very right. You can o...

qq_43490894的博客 461

从BSCAN到BAP:深度解析Tessent MBIST逻辑的协同工作机制与设计考量

本文深入解析了Tessent MBIST逻辑中BSCAN Interface、Logic Group Def、Controller与BAP模块的协同工作机制。文章以一条测试指令的完整路径为例,详细阐述了数据流与控制流如何跨模块、跨时钟域协同工作,并重点探讨了MBIST BAP在协议转换与流量管理中的核心桥梁作用,为芯片内建自测试的集成与调试提供了关键的设计考量和实战技巧。

kappa的博客 482

C语言入门系列:指针入门(超详细)

指针与内存是息息相关的,在学习指针之前,先回忆下内存相关的知识。内存是程序运行期间存储数据的硬件设备,为了方便管理,计算机将内存划分为一个个小的单元,每个单元的大小是一个字节。如果把内存比作一栋酒店大楼,内存单元就像是一个个小的房间,数据就住在小房间里。我们知道,为了客人能准确找到属于自己的房间,酒店房间是有房号的。同样,内存单元也是有编号的,这个编号在计算机中称之为“内存地址。

epitomizelu的专栏 3696

POJ - 2823 Sliding Window (单调队列求解区间最值)

POJ - 2823 Sliding Window Time Limit: 12000MS   Memory Limit: 65536KB   64bit IO Format: %lld & %llu Submit Status Description An array of size n ≤ 10 6 is given to yo

qq_18661257的专栏 1277

基于 Google Colab 的 mask rcnn 训练自己的数据集(以实例分割为例)

详细步骤1 数据集的制作1.1 数据标注1.2 生成数据集2 环境的搭建2.1 搭建流程2.2 注意事项(报错)3 开始训练4 可视化4.1 修改webcam.py文件4.2 进行可视化5 参考文章 1 数据集的制作 1.1 数据标注 使用 labelme=4.5.6 版本进行标注,标注文件指定到保存图片的路径下,也就是json文件和jpg文件放在同一个文件夹里 1.2 生成数据集 先手动划分训练集和测试集(包括图像和标注文件),然后分别整合它们的标注信息,参考代码:1_ships_to_coco.py

G果的博客 8002

单调队列学习

转自:http://apps.hi.baidu.com/share/detail/34010558 【单调队列】在解一个序列某个区间段的最值问题,我们可以用到单调队列来解决。  比如poj2823 Sliding Window 就是一个很好的例子:给定一个序列,要求序列中

深秋的落叶 1238

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

poj2823 Sliding Window(单调队列)

题意: 给定一个长度为 NNN 的数字序列,要求你求出每个长度为 KKK 的区间内的最小值与最大值。 单调队列做法: const int N = 1e6 + 10; const int mod = 998244353; int a[N], maxx[N], minn[N], queue1[N], queue2[N];//queue存位置 int i, n, k, front1, front2, tail1, tail2, cnt; int main() { sdd(n, k); cn..

邵光亮的博客 14万+

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

[单调队列] poj 2823 Sliding Window

题意: 给你n个数和一个k 把n分成连续的n-k+1个区间 第一行按顺序输出每个区间的最小值,第二行是最大值。 思路: 单调队列的模板题,这里注意的是插入队尾的时候需要二分加速 代码: #include"stdio.h" #include"algorithm" #include"string.h" #include"iostream" #include"queue" #include

Enmity_Dark 709

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

POJ 2823 Sliding Window 滑动窗口 单调队列优化

题目链接:http://poj.org/problem?id=2823 灵感来源:单调队列初步 为什么说是灵感来源呢,看了紫书上的代码,知道了单调队列的意思,而且有两种解法,一种是用C++的set,复杂度是O((N-k) log k),然后百度到了此题,为了方便用来set,然后果断TLE。就试着写单调队列,可是却写不出来。。百度到这篇博客后,第一次随便过了一遍,没怎么看懂。没看了。今天再次百度

catch_catch的专栏 1396

POJ - 2823 Sliding Window(单调队列)

题目链接:https://vjudge.net/problem/POJ-2823 题意:给定一个数列,从左至右输出每个长度为k的数列段内的最小数和最大数。 思路:单调队列维护两端,它的头端可以出数,尾部可以进数,通常用于解决局部性的最值问题。单调栈只维护一端,通常维护全局的单调性。单调栈大小没有上限,而单调队列通常有大小限制。所以本题选择用单调队列解。 代码中数组的解释: 数组用来表示一个单调队列 数组表示单调队列里每个元素在原数组中的下标 本题只需维护两个队列(单调递减队列,头部肯定是最大值,.

sugarbliss 441

POJ 2823 Sliding Window

被逼着写的一个题,以前觉得难度很大的东西,一旦有动力去好好学习,其实真的并没有那么难 ACM代码其实没有多少行,而且原理也就那么几句,怀着一颗向上的心,每天正能量,每天一道a+b,时间长了真的会有很大进步的 因为,时间都看得见 (废话了一波) 题目链接:POJ2823 题意:给定n,k,n个数,求每个连续的以K为区间长度的区间中的最小值和最大值 方法1:线段树!区间内的最大最小

ACdream 391

ACM-单调队列之Sliding Window——poj2823

ACM 单调队列 Sliding Window poj2823 单调队列详解

继续激情,继续奋斗。 2507

POJ 2823 Sliding Window(单调队列)

题意  长度为n的数组上有个长度为k的滑窗从左向右移动  求每次移动后滑窗区间的最小值和最大值  输出两行  第一行所有最小值  第二行所有最大值 可以用线段树来做  但是单调队列更简单  单调递增队列: 队尾单调入队(入队元素大于队尾元素时直接入队  否则队尾出队直到队尾元素小于入队元素或者队列为空)  队首队尾都可以出队 求最小值时 先判断队首元素是否在滑窗之内  不在队首就出队  然后

Deng's site \# 2787

POJ2823 Sliding Window 单调队列

题目链接 http://poj.org/problem?id=2823 分析 单调队列模板,在从队尾出队时,可以用二分快速找到最终位置,但效果并不明显。 AC代码 #include <cstdio> inline int read() { int num = 0, flag = 1; char c = getchar(); while (c < '0' || c >...

Kevin的博客 255

Sliding Window POJ - 2823 (单调队列)

题目链接 这道题是一道非常经典的单调队列题目. 单调队列是一种单调递增或单调递减的队列结构, 在C++STL中有priority_queue来实现了, 但较为麻烦只能对队尾进行操作和访问, 同时考虑到可能存在超时的因素, 所以在平常做题中我们一般都会选择自己来实现单调队列. 对于求类似区间最大/最小的问题, 单调队列是最佳选择, 因为它可以在常数复杂度下实现该过程. 即使是对于1.2.3.4.5...

Suprit's blog 861

[POJ2823]Sliding Window(单调队列)

[POJ2823]Sliding Window(单调队列)-ZGX

私は Mocha!! 692

POJ - 2823 Sliding Window 单调队列

题目链接:http://poj.org/problem?id=2823 题目分析 单调队列问题的经典例题,题意:有一串数,编号为 1- n , 问从 1 开始,求当前位置及其后共k个数中的最大值和最小值,每次位置向后移动一位,如图: n = 8 , k = 3, v[] = { 1, 3 , -1 , -3 , 5 , 3 , 6 , 7 } 解题思路: 首先,这个题目肯...

天际苍穹的博客 192
上一篇: 荷马史诗(算法竞赛进阶指南 P81,K 叉哈夫曼树)
下一篇: 可达性统计(算法竞赛进阶指南 P93,拓扑排序 + 状态压缩)
The___Flash
博客等级 码龄8年 79粉丝 223原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值