首页 > 其他 > 详细

RMQST表实现/单调队列

时间:2019-04-14 18:26:46      阅读:147      评论:0      收藏:0      [点我收藏+]

写了几道题之后才敢来瞎bb

RMQ (Range Minimum/Maximum Query)问题是指:

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

for循环遍历一边,然后输出,那么你很容易想到会被T飞掉;

1、先写一种比较高效的ST算法解决这个问题。

ST(Sparse Table)算法可以在O(nlogn)时间内进行预处理,然后在O(1)时间内回答每个查询。

其实ST表是一种动态规划的思想;每次运用倍增求解每一个区间;

定义:f(i,j)表示[i,i+2j1]这段长度为2j的区间中的最大值。

预处理:f(i,0)=ai。即[i,i][i,i]区间的最大值就是ai

状态转移:将[i,j]平均分成两段,一段为[i,i+2j11],另一段为[i+2j1,i+2j1]

两段的长度均为2j1f(i,j)的最大值即这两段的最大值中的最大值。

得到f(i,j)=max{f(i,j1),f(i+2j1,j1)};

查询:

摘来大佬的题解;

技术分享图片

 

RMQST表实现/单调队列

原文:https://www.cnblogs.com/Tyouchie/p/10706243.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!