随笔分类 -  RMQ-LCA

POJ上的LCA问题小结 [转]
摘要:1330和1470是入门系列,可以说基本上时用来测试板子的 1986比上面两个稍微多了一个距离,但是本质还是一样的对于一个询问d[u,v]=dis[u]+dis[v]-dis[LCA(u,v)]可以一边LCA一边动态修改当前点到根的距离 3728其实就是记录的东西多了一点(1)孩子到父亲最大价格(2)孩子到父亲最小价格(3)从自己到祖先的最大收益 (4)从祖先到自己的最大收益,这里的分情况讨论只需要手动的画下草图,在使用并查集的同时,做更新操作,维护上面提到的四个变量,对于一个查询,我们用 爬山坡的方式保留最优值,这里画图会显的更为直观 3694说实在的和LCA没有特别大的关系,就是df... 阅读全文

posted @ 2011-10-16 11:52 龙豆 阅读(2231) 评论(0) 推荐(0) 编辑

poj-1330 Nearest Common Ancestors **
摘要:/* * poj-1330.cpp * LCA * * LCA入门题 * * 没有用tarjan的离线算法, 用了个在线的, 时间复杂度O(n)-O(sqrt(n)) * * height为树的高度 * 把树按层次分成sqrt(height)个段,每段sqrt(height)层。 * * 对LCA(x, y) * 先把x, y 导入到同一段, 由于最多sqrt(height)段, 所以O(sqrt(height)) * 再在同一段内, 按普通方法找到x, y的LCA, 由于每段sart(height)层, 所以O(sqrt(height)) * 故查询时间为 O(sqrt(height)) = 阅读全文

posted @ 2011-10-16 11:46 龙豆 阅读(445) 评论(0) 推荐(0) 编辑

poj-3368 Frequent values ***
摘要:/* 480ms * poj-3368.cpp * Created on: 2011-10-14 * * * RMQ: * 10 3 -1 -1 1 1 1 1 3 10 10 10 2 3 1 10 5 10 0 * * 1、value[i]:第i个位置的值 * 2、对每个值,记录该值最后出现的位置,endPoint * 3、记录每个值的前面一个值: prePointValue, 如样例中1的前面一个值是-1, 即prePointValue[1] = -1 * 4、记录... 阅读全文

posted @ 2011-10-15 20:18 龙豆 阅读(394) 评论(0) 推荐(0) 编辑

poj-3264 Balanced Lineup *
摘要:/* * 入门题 * RMQ Sparse-Table : O(nlgn) - O(1) * * 2000ms... * */#include <cstdio>using namespace std;const int maxN = 50000 + 10;const int maxK = 50;int height[maxN], n, q;//记录的是坐标int dMax[maxN][maxK], dMin[maxN][maxK];inline int max(int lhs, int rhs){ return (height[lhs] > height[rhs] ? lhs 阅读全文

posted @ 2011-10-14 23:09 龙豆 阅读(231) 评论(0) 推荐(0) 编辑

RMQ+1/-1算法 [转]
摘要:[转] http://blog.csdn.net/ljsspace/article/details/6659517 RMQ+1/-1问题要求数列中相邻两个元素相差+1或-1。利用这个限定条件可以使该算法复杂度总体上达到<O(n),O(1)>。具体做法是:1) 设数列A的大小为n,先对数列A分组,每组大小为b=1/2.logn (之所以这样分是为了将预处理复杂度从O(nlogn)降为O(n)),共分为n/b个组;以下第2到第4步完成RMQ+1/-1问题的预处理阶段(参考以下实现中的preprocess方法)。2)生成O(sqrt(n))个LU表P[][]和一个block类型数组T[] 阅读全文

posted @ 2011-10-14 22:08 龙豆 阅读(1452) 评论(0) 推荐(0) 编辑

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示