POJ 2823 Sliding Window (单调队列)

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

http://poj.org/problem?id=2823


注意G++会TLE。

用pair<int,int>数组模拟deque即可


完整代码:

/*5360ms,19272KB*/

#include<cstdio>
#include<cstring>
#include<utility>
using namespace std;
const int mx = 1000005;

pair<int, int> minq[mx], maxq[mx]; /// first表示值,second表示该值在原序列的位置
int maxans[mx];
int minhead, mintail, maxhead, maxtail;

void push(int x, int i)
{
	/// minq.push(x)
	if (mintail != minhead)
		while (mintail != minhead && x <= minq[mintail].first) --mintail;
	minq[++mintail] = make_pair(x, i);
	/// maxq.push(x)
	if (maxtail != maxhead)
		while (maxtail != maxhead && x >= maxq[maxtail].first) --maxtail;
	maxq[++maxtail] = make_pair(x, i);
}

int main()
{
	int n, k, i, j = 1, x, cnt = 0;
	scanf("%d%d", &n, &k);
	for (i = 0; i < k; ++i)
	{
		scanf("%d", &x);
		push(x, i);
	}
	printf("%d", minq[minhead + 1].second == 0 ? minq[++minhead].first : minq[minhead + 1].first);
	maxans[cnt++] = (maxq[maxhead + 1].second == 0 ? maxq[++maxhead].first : maxq[maxhead + 1].first);
	for (; i < n; ++i, ++j)
	{
		scanf("%d", &x);
		push(x, i);
		printf(" %d", minq[minhead + 1].second == j ? minq[++minhead].first : minq[minhead + 1].first);
		maxans[cnt++] = (maxq[maxhead + 1].second == j ? maxq[++maxhead].first : maxq[maxhead + 1].first);
	}
	printf("\n%d", maxans[0]);
	for (i = 1; i < cnt; ++i) printf(" %d", maxans[i]);
	putchar(10);
	return 0;
}

[POJ2823]Sliding Window(单调队列)by_zgx 博客链接 http://blog.youkuaiyun.com/CABI_ZGX/article/details/52701138 立即下载

相关推荐

[POJ2823]Sliding Window(单调队列)by_zgx优化最新版

我的博客链接:http://blog.youkuaiyun.com/CABI_ZGX

POJ-2823 && POJ-3250 (单调队列 && 单调栈)

poj-2823: 求n个数序列中的所有段长度为k的区间内的最大值和最小值。 poj-3250: 求n个数序列中每个位置的右边的数小于其数值的个数,并且中间不能有大于等于它的数。 poj-2823 下面这份代码只能在c++编译器下才能过,其它编译器超时,其实只需要在出队的时候加个二分优化就能过,但懒得改了,主要是学单调队列的做法。 #include using namespace

yo_bc的博客 373

高温环境下RS485通信故障分析与MOS管解决方案

RS485通信作为工业控制领域的基础总线技术,其可靠性直接影响系统稳定性。在高温等恶劣环境下,传统三极管开关电路会因温度特性导致通信故障。通过分析三极管Ube电压随温度变化的特性,揭示了电路失效的物理原理。相比之下,MOS管作为电压控制型器件,具有温度稳定性好、功耗低等优势,更适合工业环境应用。本文通过一个发动机舱内RS485通信故障的实际案例,详细对比了三极管与MOS管在高温环境下的性能差异,并给出了具体的电路改进方案。该案例对工业通信接口设计具有普遍参考价值,特别适用于需要应对高温、振动等挑战性环境的硬

weixin_42612405的博客 406

POJ2823 滑动窗口中元素的最值(单调队列)

给定一个大小已知的数组以及一个大小已知的滑动窗口,窗口每个时刻向后移动一位,求出每个时刻窗口中数字的最大值和最小值。 这个题是单调队列的入门题。 求最大值:建立一个单调递减队列,元素从左到右依次入队,入队之前必须从队列尾部开始删除那些比当前入队元素小或者相等的元素,直到遇到一个比当前入队元素大的元素,或者队列为空为止。若此时队列的大小超过窗口值,则从队头删除元素,直到队列大小小入窗口值为止。然

Shuyu Fang 8945

高压脉冲发生器的各种电路图

高压脉冲发生器的各种电路图

qq_65102825的博客 5902

SAM3模型国内快速上手:Modelscope权重下载+环境配置一条龙指南

本文详细介绍了SAM3模型在国内的快速部署方案,包括通过Modelscope平台下载权重文件、优化CUDA 11.8环境配置以及实战避坑技巧。针对国内开发者常见的网络问题和环境兼容性问题,提供了从权重下载到模型加载的全流程指南,帮助用户高效完成部署并快速上手SAM3模型。

weixin_28465009的博客 1144

[单调队列] 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

共封装光学(CPO):下一代互联革命

Nvidia:产品:Quantum-X Q3450(115.2T,144×800G,2025H2上市)、Spectrum 6800(409.6T,512×800G,2026H2上市);技术路线:TSMC COUPE封装、MRM调制器、光栅耦合、外部激光源(Lumentum/Ayar Labs供应);战略定位:以横向扩展CPO验证供应链,最终聚焦纵向扩展场景(Feynman架构)。

存储随笔 4965

POJ 2823 Sliding Window(单调队列)

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

Deng's site \# 2787

Python模拟发送SOME/IP消息(Scapy模块)

SOMEIP提供服务、订阅、响应、通知等Python代码示例

liluo0815481的博客 3068

4、基于抽象解释的静态分析器中的跟踪分区与ASTRÉE分析器解析

本博客探讨了基于抽象解释的静态分析器中的跟踪分区技术,并深入解析了ASTRÉE分析器的工作原理和应用。通过示例程序说明了跟踪分区如何提升分析精度,减少误报,以及ASTRÉE如何利用多种数值抽象域(如八角形域、浮点区间线性形式等)来处理复杂的嵌入式C程序。此外,还讨论了ASTRÉE的模块化设计、循环展开优化、用户断言与自动细化的局限性等内容,为保障嵌入式软件的安全性和可靠性提供了理论与实践支持。

kotlin6android的博客 117

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

使用 Visual Studio Code 搭建 SAP UI5 本地开发环境

工欲善其事,必先利其器。时至今日,SAP 提供了非常多的 SAP UI5 开发工具,既包含本地搭建的,也包含浏览器里远端使用的工具,比如 WebIDE 和 Business Application Studio. 我们访问下面这个链接,就能找到所有这些工具的安装或者配置步骤: https://tools.hana.ondemand.com/#sapui5 如果想选择本地开发,SAP 推荐的工具是 Visual Studio Code,也就是本文要介绍的内容。 也可以下载 WebIDE 的本地安装包,将其安

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1万+

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万+

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

POJ 2823 Sliding Window 单调队列

解题思路: 维护一个递增的单调队列和一个递减的单调队列,基础题。 代码: #include #include #include #include #include #include #include #include #include #include #include #define LL long long #define FOR(i,x,y) for(int i=

蘑菇--走在通往梦想的道路上。 852

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

POJ - 2823 Sliding Window(单调队列)

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

sugarbliss 441

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

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

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

继续激情,继续奋斗。 2507

[POJ2823]Sliding Window(单调队列)

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

私は Mocha!! 692

【单调队列】poj2823_Sliding Window

题目链接 http://poj.org/problem?id=2823 【题解】 这个题目就是纯模板题,但是这个题目有很多坑点,首先这个题目是多组输入的,然后这个输出还卡我们时间 #include<stdio.h> #include<iostream> using namespace std; const int N = 1e6+10; int IM[N],Im[...

Z_sea的博客 264

单调队列 Sliding Window POJ - 2823

单调队列在求滑动窗口的时候用 例:给出一个长度为n的序列A,求A中所有长度为m的连续子序列的最大值 解法就是 用一个双端队列 始终保持队列中的元素的个数为m 求最大值就单调递减队列 从头开始遍历每个位置 那么队头即为每个子序列的最大值 例题: Sliding Window POJ - 2823 这个求最大和最小值 用两个双端队列 切记 能一个循环完事...

weixin_30697239的博客 90

POJ 2823 Sliding Window (单调队列)

/* poj 2823 8012K 5344MS */ #include #include #define MAXN 1000005 #define MAX_INT 2147483647 using namespace std; int que_min[MAXN][2],que_max[MAXN][2],ans_min[MAXN],ans_max[MAXN]; //que二维数组,[]

公孙轩辕,一眼千年 384

[POJ 2823]Sliding Window[单调队列]

题目链接:[POJ 2823]Sliding Window[单调队列] 题意分析: 包含n个数字的数列,用一个长度为k的窗口移动从1开始向右移动,每次输出窗口中的最小值和最大值。分两行输出结果:最小值输出到上行,最大值输出到下行。 解题思路: 考虑每次移动窗口要进行的操作,总共有两种,增加一个数,删去一个数。考虑到需要涉及到删除操作,我们使用单调队列来进行维护。 L代表队列的左端,R代表

闲停 571

poj2823Sliding Window——单调队列

题目:http://poj.org/problem?id=2823 单调队列模板。 代码如下: #include<iostream> #include<cstdio> using namespace std; int n,k,a[1000005],mx[1000005],mn[1000005]; int main() { scanf("%d...

aodan5477的博客 117

poj2823 Sliding Window 单调队列

题目 An array of size n ≤ 106 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 only see the k numbers in the window. Each t...

戒毒戒赌戒网瘾,学习学问学做人——好好学习 288

POJ2823 Sliding Window【单调队列】

Sliding Window Time Limit:12000MS Memory Limit:65536K Total Submissions:76785 Accepted:21745 Case Time Limit:5000MS Description An array of sizen≤ 106is given to you. T...

逐梦者 321
上一篇: UVa 10263 Railway (点到线段的最短距离)
下一篇: UVa 11151 Longest Palindrome (另一种最长回文&LCS)
synapse7
博客等级 码龄14年 432粉丝 701原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值