倍增思想
帐下幕僚
我只是一个普普通通的大学学生,我来到这里是想获得我在学校所不能得到的知识。
展开
-
Codefores 689D. Friends and Subsequences(二分+st)
题意:求max(l,r)与min(l,r)相等的对数。 用st表保存max和min的信息。 但是这样子如果枚举左端点再枚举右端点,n2绝对t了。 我刚开始写的是二分区间(递归写的),wa了,找不出哪里错了,不过比起下面这种又不好写又不好查代码。所以要利用区间性质进行二分, 利用序列a的最大值单调非递减,序列b的最小值单调非递增,二分两次。 第一次求出最大值与最小值相等时j的最小值p,第二次原创 2016-07-23 16:43:02 · 317 阅读 · 0 评论 -
Sparse Table算法+poj3264(Balanced line up)题解----倍增思想
题意就是求一段区间的最大值和最小值之差(RMQ问题)。由于查询量大,考虑使用st表(空间复杂度(O(nlogn)),初始化复杂度(O(nlogn)),查询复杂度(O(1))!!!)Sparse Table算法,简称ST算法,可以用来求解RMQ(区间最值查询)问题。 RMQ问题的形式一般是:存在一个大数组,要求对于给定的起点和终点,迅速回答出这段区间的最大值或最小值。 最朴素的方式是扫描起点到终点原创 2016-07-19 10:55:18 · 403 阅读 · 0 评论 -
LCA三种算法学习(离线算法tarjan+在线算法转rmq+在线倍增)例题poj1330、1470;hdu4547、2874
LCA 问题,即Least Common Ancestors(最近公共祖先)的意思是:给定一有根树,求其两个节点最近的公共祖先;节点的祖先即从节点至根的路径上的节点的集合。lca离线算法离线算法,就是要将所有询问先存起来,一起处理,然后再一起输出,与之相对应的是在线算法。在线算法,每给一个询问便可以立即求出答案。Tarjan算法利用并查集优越的时空复杂度,我们可以实现LCA问题的O(n+Q)算法,这原创 2016-07-24 17:14:36 · 1760 阅读 · 0 评论