摘要: //洛谷P3374 对于树状数组这个数据结构,维护的无非就是这几个操作: 1.单点修改,区间求和 2.区间修改,单点查询 对于这道题,就是操作1 首先,我们先来了解一下树状数组: 在上图中A数组是原数组,C数组记录了其所有儿子结点的和,如何知道C[i]的父亲的位置呢? 这就要引入lowbit函数了: 阅读全文
posted @ 2017-12-01 17:25 XjzLing 阅读(220) 评论(0) 推荐(0) 编辑
摘要: //洛谷P3367 并查集算法也算是算法中的经典了,它可以用O(logn)的时间支持一张图中集合的合并与查询。 这里,我们首先用一个数组fa[x]来表示以x为编号的祖先的编号(*每一个点的初始祖先为它自身)。 然后就是并查集的重中之重:find()函数!!! find(x)就是查询点x 所在集合的祖 阅读全文
posted @ 2017-12-01 17:02 XjzLing 阅读(240) 评论(0) 推荐(0) 编辑
摘要: //洛谷P3366 (其中所应用的并查集原理请见http://www.cnblogs.com/XjzLing/p/7943363.html) 这里选用Kruscal的方法:先将每一个点用并查集记录它们的祖先,用fa[i]来表示 然后将边按照权重,从小到大排序,这里选用sort的cmp。 然后,从小到 阅读全文
posted @ 2017-12-01 16:47 XjzLing 阅读(225) 评论(0) 推荐(0) 编辑
摘要: //洛谷P1436 (模板) 我们定义映射f(ai)=i,那么两个排列可以转换为(f(a1),f(a2),...,f(an))=(1,2,...,n)和(f(b1),f(b2),...,f(bn)),我们进行这样的转换之后,就把本题转换为求最长上升子序列的长度的题目了。 最长上升子序列存在O(N l 阅读全文
posted @ 2017-12-01 16:36 XjzLing 阅读(187) 评论(0) 推荐(0) 编辑