学习笔记(倍增)Balanced Lineup G题解

本文介绍了倍增算法(RMQ)如何将区间极值计算的时间复杂度优化到O(log2n),并详细解析了洛谷上的 Balanced Lineup G 题目,通过实例展示如何利用倍增思想求解区间最大值和最小值问题。代码实现包含在内。
摘要由CSDN通过智能技术生成

倍增(RMQ):用于计算区间极值
使一步一步增加转变为2^k步增加。举个例子:
一只兔子从1跳到10,一步一步跳要10步,倍增的思想是:
先跳8步,没到,跳到9.
跳4步,过头了,不跳.
跳2步,过头了,不跳.
跳1步,到了,跳到10.
时间复杂度是从O(n)到O(log2n);
洛谷例题Balanced Lineup G
这是一道求区间内最大值和最小值的题。典型倍增题。
我们用f[i][j]记录以i为起点,长度为2^j的区间内的最小值,f[i][0]就是当前位置的点。我们用式子f[i][j]=max(f[i][j-1],f[i+(1<<(j-1)][j-1])来计算。
我们将f[i][j]以i为起点,长度为2^ j的区间分成两部分求,是以i为起点,长度为2^ (j-1)的区间最大值与以i+(1<<(j-1)为起点,长度为2^ (j-1)的区间最大值中的较大值。之后再分解到每个点,就可得到最大值。
如图分别求黄色区间和红色区间最大值
在这里插入图片描述

最小值g[i][j]同上。
这里的k我随便取到个最大值到20,只要2^k能超过题目的数据范围就行
代码

#include
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值