线段树分治

原理

改修放区间,答案放叶子的一种分治方法

应用

二分图

考虑一个图是二分图当且仅当没有奇环,用扩展域并查集维护

类似线段树的方法,遍历到一个区间就下放完全包含这个区间的边,然后判断是不是二分图

回溯的时候删去影响,所以需要资瓷删除的并查集

CF918E

(bitset)维护每个位置的答案,最后合并到一起

[CTSC2016]时空旅行

过于毒瘤

考虑把每个点影响子树化为(dfs)序列上问题,然后线段树分治

对于题目,我们要求(min{(X-x_i)^2+c_i}),(X)每次给定

拆开(=X^2-2Xx_i+x_i^2+c_i=k)

变形一下(2Xx_i+k=X^2+x_i^2+c_i)

我们希望(k)最小,发现这是一个线性规划问题,对于每个决策点形如((x_i,X^2+x_i^2+c_i))

但是对于每个(X)来说(X^2)固定不用加入决策,所以决策点变为((x_i,x_i^2+c_i))

对于线段树的每个端点维护一个下凸包

如果我们大力平衡树维护复杂度(O(nlog^2n))

观察发现可以按(x_i)离线插入,维护凸包变成均摊(O(1)),复杂度(O(blogn))

[FJOI2015]火星商店问题

对时间建线段树,每个区间用可持久化(01trie)维护。。。

有点不一样是查询区间修改单点

我们下放的时候按照整体二分的方法把包含的商店分到数组的前后两端,记录边界就可以了

时间复杂度(O(nlog^2n))

CF938G

根据图上异或路径的经验这个东西可以用线性基实现

但是线性基不资瓷删除

所以我们选择线段树分治,只要同时保存(log)个线性基

同时我们选择并查集维护图的连通性以及图上异或距离,(find)的同时求出每个点到根节点的异或和,根据异或的性质可以(O(logn))求出两点距离

原文地址:https://www.cnblogs.com/knife-rose/p/12388274.html