RMQ求区间最值 nlog(n)

转载于:http://blog.csdn.net/xuzengqiang/article/details/7350465

RMQ算法全称为(Range Minimum/Maximum Query)意思是给你一个长度为n的数组A,求出给定区间的最值的下标。当然我们可以采用枚举,但是我们也可以使用线段树来优化,复杂度为(nlogn),但是最好的办法是采用Sparse_Table算法,简称ST算法。他能在进行(nlogn)的预处理后达到n(1)的效率。下面来分析下最大值和最小值,都要用到DP的思想。

最小值(Mininun):我们可以用F(i,j)表示区间[i,i+2^j-1]间的最小值。我们可以开辟数组来保存F(i,j)的值,例如:F(2,4)就是保存区间[2,2+2^4-1]=[2,17]的最小值。那么F(i,0)的值是确定的,就为i这个位置所指的元素值,这时我们可以把区间[i,i+2^j-1]平均分为两个区间,因为j>=1的时候该区间的长度始终为偶数,可以分为区间[i,i+2^(j-1)-1]和区间[i+2^(j-1)-1,i+2^j-1],即取两个长度为2^(j-1)的块取代和更新长度为2^j的块,那么最小值就是这两个区间的最小值的最小值,动态规划为:F[i,j]=min(F[i,j-1],F[i+2^(j-1),j-1]).同理:最大值就是F[i,j]=max(F[i,j-1],F[i+2^(j-1),j-1]).

现在求出了F[i,j]之后又是怎样求出最大值或者最小值的,怎么转换为o(1)这种算法的~这就是ST算法:

这个时候询问时只要取k=ln(j-i+1)/ln2即可,那么可以令A为i到2^k的块,和B为到2^k结束的长度为2^k的块;那么A,B都是区间[i,j]的子区间,所以即求A区间的最小值和B区间的最小值的最小值。这个时候动态规划为:RMQ(i,j)=min(F[i,k],F[j-2^k+1,k]);

log2的求法:

Log[0] = -1;
for(int i = 1;i <M;i++)Log[i] = ((i&(i-1)) == 0)?Log[i-1]+1:Log[i-1];
RMQ:

void RMQ(int n)
{int i,j;int m=Log[n];for(i=1;i<=n;i++)dp_min[i][0]=dp_max[i][0]=dis[i];//dis代表原数列for(j=1;j<=m;j++){for(i=1;i<=n+1-(1<<j);i++){dp_max[i][j]=max(dp_max[i][j-1],dp_max[i+(1<<(j-1))][j-1]);dp_min[i][j]=min(dp_min[i][j-1],dp_min[i+(1<<(j-1))][j-1]);}}
}
最小值:
int lcp(int x,int y)
{int m=Log[y-x+1];return min(dp_min[x][m],dp_min[y+1-(1<<m)][m]);
}
最大值

int lcp(int x,int y)
{int m=Log[y-x+1];return max(dp_max[x][m],dp_max[y+1-(1<<m)][m]);
}




转载于:https://www.cnblogs.com/mypsq/p/4348112.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/492750.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一个令人心醉的谜题——DNA和RNA是如何演化出美妙的螺旋结构?

来源&#xff1a;原理丨公众号在现代科学中&#xff0c;一直存在一个匪夷所思到令无数科学家心醉的谜题——DNA和RNA究竟是如何演化出这种美妙的螺旋结构的&#xff1f;最近&#xff0c;佐治亚理工学院的一组研究人员在超分子聚合物的形成过程中&#xff0c;发现了一种全然自发…

Jacobi迭代法

我们在求解矩阵时&#xff0c;有很多种方法&#xff0c;其中当矩阵是大型稀疏矩阵&#xff08;矩阵中有大部分元素都为0&#xff09;时&#xff0c;我们可以用迭代法求解。 其中Jacobi迭代法就是很简单易懂的一种。 我编写的C代码如下&#xff0c;其中文件matrix.txt内容如下…

AI人才「用工荒」如何解决?看看这几家顶级公司的应对策略

来源&#xff1a; Forbes编译&#xff1a; 机器之心 太浪在未来几年&#xff0c;人工智能可能会成为众多行业的战略选择&#xff0c;但有一个重大的挑战&#xff1a;招人。如何避免招募 AI 人才的误区&#xff1f;这里有来自几家顶级公司的建议。招到 AI 人才后&#xff0c;可能…

单应矩阵的解释

参考博客&#xff1a; https://www.cnblogs.com/wangguchangqing/p/8287585.html https://blog.csdn.net/jay463261929/article/details/53611363

学习网址积累

ecshop120.com ecshop的学习开发网址 68ecshop 转载于:https://www.cnblogs.com/ymj0906/p/4088749.html

AI芯片混战,谁能挑战英伟达?

来源&#xff1a;forbes我准备写一篇预测未来一年的AI芯片&#xff0c;以及英伟达如何应对挑战的文章&#xff0c;但我很快意识到&#xff0c;文章要比我预期的要长得多。由于有很多内容要介绍&#xff0c;我决定把文章分为3个部分。第1部分&#xff1a;简介&#xff0c;以及分…

webServices 应该支持Get和Post调用,在web.config应该增加以下代码

1 #region Tip:使用说明2 //webServices 应该支持Get和Post调用&#xff0c;在web.config应该增加以下代码3 //<webServices>4 // <protocols>5 // <add name"HttpGet"/>6 // <add nam…

VS2017安装openGL

项目名->管理NuGet程序包->浏览->搜索nupengl&#xff0c;下载安装即可。 参考博客&#xff1a;https://blog.csdn.net/HY_JT/article/details/79482556 还可以参考博客&#xff1a;https://blog.csdn.net/yinglang19941010/article/details/50166343 #include <c…

从专利数量看全球最具创新力的50家公司

来源&#xff1a;资本实验室专利&#xff0c;在很大程度上不仅代表着一家企业的技术实力&#xff0c;也代表着一个国家的长期发展潜力。很多机构也习惯用专利数量来衡量企业或国家的创新能力。为保护自身的技术发明&#xff0c;全球大型公司都会在很多国家申请专利&#xff0c;…

Java魔法堂:初探MessageFormat.format和ChoiceFormat

一、前言                               刚开始从.net的转向java的时候总觉得 String.format 用得不习惯&#xff0c;希望格式模版会这样 {0}, this is {1}s cat.{1},this is {0}s dog. 而不是 %1$s,this is %2$ss cat.%2$s,this is %1$ss dog.…

2019年深度学习的十大预测

来源&#xff1a;云栖社区丨公众号摘要&#xff1a;如果连思考方式都是错的&#xff0c;机器学习肯定不会有很大的进步&#xff01;2018年已结束&#xff0c;现在是开始预测2019深度学习的时候了。以下是我之前对2017年和2018年的预测和回顾&#xff1a;关于2017年预测和回顾。…

正整数 n 所有可能的和式的组合

正整数 n 所有可能的和式的组合&#xff08;如&#xff1b; 41111、 112、 13、22、4&#xff09; 代码的思想是&#xff0c;从最小值开始&#xff0c;依次加入序列中&#xff0c;整体类似DFS&#xff08;深搜&#xff09;&#xff0c;因为有回退的一步。区别是加入一个值s&am…

一张图看懂AR至GL数据流

转载于:https://www.cnblogs.com/wanghang/p/6299101.html

腾讯帝国的野蛮生长史

来源&#xff1a; CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;译者&#xff1a;弯月如今的社交巨头腾讯&#xff0c;可以说是很多厂商可望而不可及的存在。手握微信和QQ这两张王牌&#xff0c;其制霸着整个国民的社交脉络。不过在腾讯成立之初&#xff0c;也是经过了漫…

[LeetCode] Plus One

Given a non-negative number represented as an array of digits, plus one to the number. The digits are stored such that the most significant digit is at the head of the list. 这题有意思啊&#xff0c;虽然是easy题但我还是折腾了很久&#xff0c;一开始做出一个逗…

推荐镜像

参考网址&#xff1a;https://coderschool.cn/1853.html

六大“未来式”存储器,谁将脱颖而出?

来源&#xff1a;半导体行业观察摘要&#xff1a;最近&#xff0c;一篇回顾该领域现状的论文对六种最有前景的技术进行了盘点和解读。对神经形态计算的浓厚兴趣刺激人们研发出一系列全新的存储设备&#xff0c;这些设备可以复制生物神经元和突触功能。最近&#xff0c;一篇回顾…

理论篇 GIT使用笔记

GIT学习指导的游戏&#xff1a;http://pcottle.github.io/learnGitBranching/?NODEMO git fetch: 下载远端所有分支的本地没有的提交列表&#xff0c;并更新local分支origin/master 1. 从remote下载local resp未包含的提交对象&#xff1b; 2. 更新local resp的远端分支点(如…

cuda学习

CUDA 安装测试部分 https://blog.csdn.net/sunmc1204953974/article/details/51000970 CUDA的HelloWorld程序编写 https://www.cnblogs.com/neopenx/p/4643705.html 对多线程并行处理的解释&#xff1a;https://blog.csdn.net/sunmc1204953974/article/details/51025801 以下的…

英特尔第七任CEO敲定 斯旺为何受到董事会青睐?

来源&#xff1a;网易科技2019年1月最后一天&#xff0c;芯片巨头英特尔公司(Intel)宣布任命临时首席执行官罗伯特斯旺(Robert Swan)为正式CEO&#xff0c;从而结束了长达数月的猎头工作。此前&#xff0c;英特尔前任CEO布莱恩柯再奇(Brian Krzanich)因与员工存在“暧昧关系”而…