随笔分类 -  RMQ和LCA

区间节点的lca
摘要:题目hdu5266 分析:多节点的LCA就是dfs序中最大最小两个节点的LCA。所以只要每次维持给出节点的dfs序的最大最小,然后就是两点的LCA 代码: rmq的st+lca的倍增 #include<stdio.h> #include<iostream> #include<algorithm> # 阅读全文
posted @ 2018-11-28 22:26 海苔 阅读(421) 评论(0) 推荐(0)
树上倍增 hdu 2586
摘要:参考博客: 代码: 阅读全文
posted @ 2018-10-19 14:39 海苔 阅读(135) 评论(0) 推荐(0)
hdu 3486
摘要:题意:n个人,每个人的价格a[ i ] ,求最少分几组,每组取一个人,多出来的人就不考虑,使得这取出人的价格大于k。(每组人数一样) 分析:每组取一个人,那这个人肯定是这组最大的,枚举多少组就可以了。 代码: 阅读全文
posted @ 2018-10-15 15:58 海苔 阅读(145) 评论(0) 推荐(0)
hud 3183
摘要:题意:给出n个数字的字符串,要求你删除m个数字后,得到的数字最小。 分析:删除m个,就是选n-m个,而且,选的第一个数,肯定在(0—(n-m-1))中,第二个就在(第一个的下一位—(n-m-2)中。就这样,RMQ选出最小就可以了。 代码: 阅读全文
posted @ 2018-10-15 14:36 海苔 阅读(125) 评论(0) 推荐(0)
rmq +二分暴力 hdu 5726
摘要:参考博客 题意:n 个数字的数列,有m个询问:求出 L 到 R 的 gcd(最大公约数 ),然后问这整个序列中有多少个区间的 gcd 和这个一样。 分析:L 到 R的gcd直接用RMQ的ST算法求,第二步,我们可以枚举左端点 i 从1-n,对每个i,二分右端点,计算每种gcd值的数量,因为如果左端点 阅读全文
posted @ 2018-10-06 16:45 海苔 阅读(144) 评论(0) 推荐(0)
LCA的RMQ求法
摘要:参考博客 仔细想一想:最近的公共祖先,其实,搜索时回朔,连通这两点,那深度最低肯定是最近的公共祖先啊。 那这样就可以变成RMQ问题了。 阅读全文
posted @ 2018-10-05 16:50 海苔 阅读(156) 评论(0) 推荐(0)
LCA的 Trajan 算法
摘要:参考博客 参考博客 根据博客的模拟,就可以知道做法和思想。 现在就是实现他。 例题 :hdu 2586 题意:m 个询问,x 到 y 的距离,我们的思想就是求出:x到根的距离+y到根的距离-2*(lca[ x ,y ])到跟的距离。 代码: 阅读全文
posted @ 2018-10-01 23:28 海苔 阅读(382) 评论(0) 推荐(0)
RMQ 模板题 poj 3264
摘要:题目:点这里 题意:给一个长度n的数列,然后又Q个询问,问L 到R 中最大值与最小值的差。 分析:RMQ 的模板题。 代码: 用 cin 和cout 会超时…… 阅读全文
posted @ 2018-09-26 16:09 海苔 阅读(208) 评论(0) 推荐(0)
二维RMQ hdu 2888
摘要:题目:点这里 题意:给出一个n*m的矩阵,然后又Q个询问:每个询问有x1,y1,x2,y2,x1,y1为子矩阵的左上角坐标,x2,y2为右上角的坐标。求此子矩阵中元素最大值,判断最大值是否在子矩阵四个角上,在就输出yes,否则输出no。 分析:二维RMQ直接上代码。 阅读全文
posted @ 2018-09-25 22:51 海苔 阅读(152) 评论(0) 推荐(0)
RMQ 的入门 hdu1806
摘要:RMQ(Range Minimum/Maximum Query),即区间最值查询,是指这样一个问题:对于长度为n的数列A,回答若干次询问RMQ(i,j),返回数列A中下标在区间[i,j]中的最小/大值。 这个有很多算法:这里介绍一种比较高效的ST算法解决这个问题。ST(Sparse Table)算法 阅读全文
posted @ 2018-09-25 20:11 海苔 阅读(170) 评论(0) 推荐(0)