摘要: 树链剖分的基本思想是把一棵树剖分成若干条链,再利用线段树等数据结构维护相关数据,可以非常~~暴力~~优雅地解决很多问题。 树链剖分中的几个基本概念: 重儿子:对于当前节点的所有儿子中,子树大小最大的一个儿子就是重儿子(子树大小相同的则随意取一个) 轻儿子:不是重儿子就是轻儿子 重边:连接父节点和重儿 阅读全文
posted @ 2019-11-05 14:40 Nanjo 阅读(153) 评论(0) 推荐(0) 编辑
摘要: "Luogu P1972" 一开始非常naive随便打了个树状数组统计就交上去了,然后不出意料的爆零了…… 然后删一删改一改过了。 重点:对于区间[1,r]中重复出现的数,我们只需要关心最右边那一个是否在[l,r]中就可以了。 具体思路在代码注释中 cpp include include using 阅读全文
posted @ 2019-11-05 09:44 Nanjo 阅读(113) 评论(0) 推荐(0) 编辑
摘要: "Luogu P3379" 题意:对于两个节点,寻找他们的最近公共祖先。 一个显而易见的解法是对于每一个节点我们都往上遍历一遍,记录下它每一个祖先,然后再从另一个节点出发,一步一步往上走,找到以前记录过第一个节点就是这两个节点的LCA 事实上在这样的数据规模下,这种解法的时间复杂度是让人无法接受的。 阅读全文
posted @ 2019-11-05 07:46 Nanjo 阅读(107) 评论(0) 推荐(0) 编辑