单调队列【总结】

本文介绍了单调队列的基本概念,包括其性质和时间复杂度。通过三个例题展示了单调队列在最大子序和、滑动窗口最大值和最小值以及烽火传递问题中的应用,详细解释了如何利用单调队列优化算法,达到更高的效率。
摘要由CSDN通过智能技术生成

一、基本概念

单调队列是指:单调递增或单调递减的队列。所以它也有如下几个性质:
1.队列中的元素在原来的列表中的位置是由前往后的(随着循环顺序入队)。
2.队列中元素的大小是单调递增或递减的。
3.从队尾入列,队首或队尾出列
时间复杂度:O(N)

二、例题

1.最大子序和(dp+单调队列优化)

题目描述
输入一个长度为n的整数序列,从中找出一段不超过m的连续子序列,使得整个序列的和最大。
例如 1,-3,5,1,-2,3
当m=4时,S=5+1-2+3=7
当m=2或m=3时,S=5+1=6
输入
第一行两个数n,m(n,m≤300000)(n,m \leq 300000)(n,m≤300000)
第二行有n个数,要求在n个数找到最大子序和
输出
一个数,数出他们的最大子序和
样例输入

6 4
1 -3 5 1 -2 3

样例输出

7

题解:
计算区间和的问题,一般转化为连个前缀和相减的形式进行求解。我们可以先求出S[i]表示序列里前 i i i项的和,则连续子序列 [ L , R ] [L,R] [L,R]中的和就等于 S [ R ] − S [ L − 1 ] S[R]-S[L-1] S[R]S[L1].所以我们可以非常巧妙地将原问题转化为:找出两个位子h和t,使 S [ h ] − S [ t ] S[h]-S[t] S[h]S[t]最大并且 y − x < = m y-x<=m yx<=m
首先枚举右端点 i i i,当 i i i固定时,问题就变为:找到一个右端点 j j j,其中j属于 [ i − m , i − 1 ] [i-m,i-1] [i

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值