约束rmq_『数据结构』RMQ 问题

RMQ (Range Minimum/Maximum Query),即区间最值问题。

对于长度为 n 的数列 A ,回答若干查询 RMQ(A,i,j)(i,j<=n) ,返回数列 A 中下标在 i,j 里的最大(小)值。

相关算法

朴素(搜索),时间复杂度: $O(n)-O(q×n)$ ,online

线段树,时间复杂度: $O(n)-O(q×\log n)$ ,online

ST(动态规划),时间复杂度: $O(n×\log n)-O(q)$ ,online

RMQ标准算法,先规约为 LCA ,再规约成约束 RMQ ,时间复杂度: $O(n)-O(q)$ ,online

ST 算法

假设当前题目要求区间最小值,我们令 dp[i][j] 代表从 i 开始,长度为 $2^j$ 这段区间的最小值。

于是便有: $dp[i][j]=\min(dp[i][j-1],dp[i+2^{j-1}][j-1])$

分析可知, $dp[i][j-1]$ 代表从 i 开始,长度为 $2^j$ 区间一半中的最小值,而 $dp[i+2^{j-1}][j-1]$ 即为区间的另一半。

最终(从下往上看):

dp[0][*]

dp[1][*]

dp[2][*]

dp[3][*]

dp[4][*]

dp[5][*]

dp[6][*]

dp[7][*]

dp[*][3]

1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值