RMQ LAC 入门
RMQ
RMQ (Range Minimum/Maximum Query)问题是指:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n),返回数列A中下标在i,j里的最小(大)值,也就是说,RMQ问题是指求区间最值的问题。——百度百科
举个例子:在1 0 4 99 8 5这一串数中求第2个数到第5个数的最小值。
有什么办法?
最简单的莫过于循环一次,时间为O(N).但如果有许多个询问呢?
这时就要用到ST算法了。利用动规预处理出每一段的最值,对于每个询问,只要O(1)的时间便能得出答案。
动规如下:f[i][j]表示从第i个位置开始的2^j个数中的最小值。转移方程如下:
f[i][j]=min(f[i][j-1],f[i+2^(j-1)][j-1])
这样,对于每个查询x,y(x<y)(在第x个位置到第y个位置的最值),答案就是
min(f[x][j],f[y-2^(j)+1][j])(其中j是log2(y-x+1))
∵[x,x+2^j]与[y-2^(j)]都是[x,y]的子区间且[x,x+2^j]U[y-2^(j)]=[x,y]。
至此RMQ问题就解决了,时间复杂度为O(nlogn)+O(1)*q(其中q为询问数量)
当然还有其他的方法这里就不讨论了
LCA
最近公共祖先(Least Common Ancestors)LCA简介:对于有根树T的两个结点u、v,最近公共祖先LCA(T,u,v)表示一个结点x,满足x是u、v的祖先且x的深度尽可能大。另一种理解方式是把T理解为一个无向无环图,而LCA(T,u,v)即u到v的最短路上深度最小的点。——百度百科
求LCA的其中一种算法便是转换成RMQ,利用ST算法求解。具体做法如下: 将这棵树用深度优先遍历,每次遍历一个点(包括回溯)都添加进数组里面。找到所询问的点第一次在其出现的位置,两个位置所夹的点中深度最小的即为所求。
如图求3与6的LCA。首先利用深度优先遍历得到一个数列:1,2,3,2,4,5,6
找到3第一次出现以及6第一次出现的位置。所夹数列即为3,2,4,5,6。其中深度最小的点就是他们的LCA,也就是2.
http://www.cnblogs.com/lazycal/archive/2012/08/11/2633486.html
RMQ LAC 入门的更多相关文章
- poj 1330(RMQ&LCA入门题)
传送门:Problem 1330 https://www.cnblogs.com/violet-acmer/p/9686774.html 参考资料: http://dongxicheng.org/st ...
- RMQ 算法入门
1. 概述 RMQ(Range Minimum/Maximum Query).即区间最值查询,是指这样一个问题:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n),返回数列A ...
- RMQ 的入门 hdu1806
RMQ(Range Minimum/Maximum Query),即区间最值查询,是指这样一个问题:对于长度为n的数列A,回答若干次询问RMQ(i,j),返回数列A中下标在区间[i,j]中的最小/大值 ...
- RabbitMQ学习之:(一)初识、概念及心得
因为网上有一篇很好的RMQ的入门帖子http://lostechies.com/derekgreer/tag/rabbitmq/,所以我就不多说了,就说说我目前看了该作者1~5章后,自己的心得.(所以 ...
- hdu 1754:I Hate It(线段树,入门题,RMQ问题)
I Hate It Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- RMQ入门
注:为方便描述算法 便于记忆 所以ST的代码用Pascal书写 见谅 RMQ,即Range Minimum/Maximum Query问题,给定一个区间,询问不同子区间的最值问题. 当询问次数较少时, ...
- RMQ入门解析
参照大佬博客:https://www.cnblogs.com/yoke/p/6949838.html RMQ(Range Minimum/Maximum Query), 是一种问题,即 查询给定区间 ...
- [转] POJ图论入门
最短路问题此类问题类型不多,变形较少 POJ 2449 Remmarguts' Date(中等)http://acm.pku.edu.cn/JudgeOnline/problem?id=2449题意: ...
- [Luogu P1886]滑动窗口--单调队列入门
题目描述 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口.现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值. 例如: The array i ...
随机推荐
- Spark性能优化(1)——序列化、内存、并行度、数据存储格式、Shuffle
序列化 背景: 在以下过程中,需要对数据进行序列化: shuffling data时需要通过网络传输数据 RDD序列化到磁盘时 性能优化点: Spark默认的序列化类型是Java序列化.Java序列化 ...
- NSIS安装程序制作工具判断系统是否安装.NET
前段时间忙了很久的系统总算上线了,由于是WinForm程序不能整个文件夹的发给客户使用.所以必须要打包,记得以前在VS2005中是自带部署功能的.现在换了VS2013那个部署功能完全弄不清方向.最后在 ...
- 你应该知道的Virtual Studio
最近,在网上看到一篇关于VS2008的一些提示,可以提高开发效率,我把它翻译过来,当然里面也有很多自己的想法,分享一下,大家可以择有用的提示而用之. 参考:每个开发者都应该知道的提示和诀窍 提示一:拷 ...
- js修改input的type属性问题(兼容所有浏览器,主要用于密码类的默认有提示文字的效果)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...
- js实现点击按钮实现上一张下一张相册滚动效果
/****判断图片是否构成滚动效果*/$(function(){ if($("#bar").find('img').size()*71<=$("#bar&qu ...
- java 多线程9 : synchronized锁机制 之 代码块锁
synchronized同步代码块 用关键字synchronized声明方法在某些情况下是有弊端的,比如A线程调用同步方法执行一个较长时间的任务,那么B线程必须等待比较长的时间.这种情况下可以尝试使用 ...
- SharePoint自动化系列——通过PowerShell创建SharePoint List Items
转载请注明出自天外归云的博客园:http://www.cnblogs.com/LanTianYou/ 代码如下(保存到本地ps1文件中,右键run with PowerShell即可): Add-PS ...
- SharePoint自动化系列——通过PowerShell在SharePoint中批量做数据
转载请注明出自天外归云的博客园:http://www.cnblogs.com/LanTianYou/ PowerShell是基于.NET的一门脚本语言,对于SharePoint一些日常操作支持的很好. ...
- SpringMVC之学习(0)
Spring MVC 是一个模型 - 视图 - 控制器(MVC)的Web框架建立在中央前端控制器servlet(DispatcherServlet),它负责发送每个请求到合适的处理程序,使用视图来最终 ...
- 【C#】访问泛型中的List列表数据
光看标题的确不好说明问题,下面描述一下问题场景: 已知后端自定义的返回的Json数据结构如下: response: { "message": "返回成功", & ...