
启发式合并
wwyx2001
OIer----这条路,仅一人独行
展开
-
[BZOJ4919][Lydsy1706月赛]大根堆(树上启发式合并+STL)
题目: 我是超链接 题解: 不难想象到这是一个变种的LIS,只不过跑到了树上 思考一下在序列上的LIS怎么做呢?有一个经典的DP+二分的nlogn的做法 现在我们用set来保存二分做法的那个数组,不同子树之间用set来启发式合并。 就是把这个点权值丢进去替换掉第一个>=它的,最长递增子序列嘛 最后输出set的大小。 这里用了multiset,和set的区别是ta允许重复的元...原创 2018-04-27 21:37:47 · 423 阅读 · 0 评论 -
[BZOJ2212][POI2011]ROT-Tree Rotations(线段树合并)
题目: 我是超链接 题解: 统计一棵树的逆序对数就是左子树逆序对数+右子树逆序对数+左右子树之间的逆序对数 这个左右子树之间的话,如果我们用权值线段树,那么可以通过讨论交不交换,用左子树个数*右子树之类的,然后直接求min值 注意要区分原树中的左右节点和线段树中的左右节点 代码: #include <cstdio> #include <iostream>...原创 2018-04-11 16:31:48 · 243 阅读 · 0 评论 -
[BZOJ3123][SDOI2013]森林(主席树合并)
题目: 我是超链接 题解: 一个是链上求第k大,另一个是连接一条边,强制在线 这样不是连通块内的第k大我们考虑权值线段树,连接一条边就是线段树的合并,对于链上的问题,我们需要采用可持久化的线段树-主席树,而且是树上主席树,即给每个点建一棵主席树,维护到根节点的所有点,这样答案就是sum(a)+sum(b)−sum(lca(a,b))−sum(fa(lca(a,b))) 还要连接一条边...原创 2018-04-10 17:30:42 · 330 阅读 · 0 评论 -
[BZOJ3545][ONTAK2010]Peaks(线段树合并||splay启发式合并)
题目: 我是超链接 题解: 首先是splay启发式合并,我们离线后将询问排序,对于每一个询问,我们把比ta小的边权加入然后给连通块维护splay,每次启发式合并查询排名 我们可以用更加优秀的线段树合并,不要忘了线段树也可以用来查询区间第k大,首先这个范围是1e9我们要离散化,然后和splay的启发式合并是一样的,只是我们每次合并线段树。时间复杂度O(nlogn)O(nlogn)O(nlog...原创 2018-04-10 11:24:25 · 379 阅读 · 0 评论 -
[BZOJ2733][HNOI2012]永无乡(并查集+splay启发式合并)
题目: 我是超链接 题解: 求解集合内第k大的话是splay的基本操作 那么维护连通性用并查集,然后就是个splay启发式合并的裸题了。 splay启发式合并,按照splay的后序遍历进行合并,不然如果你从头就开始合并父子关系就混乱了 时间复杂度是O(nlog2n)O(nlog2n)O(nlog^2n) 代码: #include <cstdio> #incl...原创 2018-04-09 23:34:21 · 248 阅读 · 0 评论