- 有一些操作,每个操作只在 l∼r 的时间段内有效。
- 有一些询问,每个询问某一个时间点所有操作的贡献。
对于这类问题,我们通过对时间建立线段树来解决。
对于每个操作,相当于在线段树上进行区间操作。
遍历整颗线段树,到达每个节点时执行相应的操作,然后继续向下递归,到达叶子节点时统计贡献,回溯时撤销操作即可。
是二分图和没有没有奇环是充要条件,所以可以用可撤销并查集(就是用一个栈把修改的操作记下来,然后再反着撤销一下就行了)来维护,每次连接u-v,我们把u和v+n合并,v和u+n合并,这样就可以通过判断a和b是否在同一集合内,来判断他们是不是在一个奇环。剩下的就是正常的线段树分治了。 代码
题意:你要维护若干个集合,每个集合都是有一个编号比他小的集合扩展而来,扩展内容为加入一个新的元素(x,c)或者删除一个已有元素。集合的扩展关系之间构成一个树形结构。有m次询问,每次给出一个X,询问第s个集合中的最小值。
分析:我们建出树形结构后,发现每个集合中的元素出现的位置是dfs序上连续的区间(第一次出现的子树扣掉删除它的子树),我们可以把这个作为时间,来计算贡献。
这道题目需要对时间和空间两个维度处理,首先看到了异或最大,想到了用01trie,又因为有区间l-r的范围,需要可持久化trie。因为有时间d的限制,我们需要用线段树分治来处理,考虑一个商品影响到的时间跨度为放入到最后,我们把询问插入线段树,按照线段树的分治思想计算每个部分的答案,并最终贡献到询问中。 代码
这题需要用到线性基+可持久化并查集+线段树分治 待补
是线段树分治模板的拓展,需要有k种颜色,还要考虑一个操作可能没有被进行 待补
其他习题
[HAOI2017]八纵八横
[SHOI2014]神奇化合物
[APIO2018]New Home 新家
[CF678F]Lena and Queries
[bzoj4311]向量
[bzoj4184]shallot
最后给出一种模板(其实
本文介绍线段树分治算法的应用场景与实现方法,包括处理时间区间操作、线段树上的区间更新与查询等问题。并通过多个实例讲解如何将线段树分治应用于不同类型的编程竞赛题目。
2978

被折叠的 条评论
为什么被折叠?



