随笔分类 - 线段树
摘要:看到统计统计路径按照套路我们应该想到点分治。 在点分树上每个节点i建一棵线段树,支持查询区间最小值,倘若编号为j的点在点分树上是i的子树里的节点,那么i的这棵线段树下标j存的就是i到j在原树上的距离。 询问的时候考虑把路径拼接就行了。 时间复杂度 O(nlog2n) #include<io
阅读全文
摘要:对于树上统计路径的问题我们通常要用到点分治来搞一搞。 首先我们点分治。 摄当前的分治中心是 x,那么把 x 周围的点按照颜色排个序。 统计的时候我们建两颗线段树,设当前处理到的 x 周围的点是 y,x 和 y 之间的点的颜色是 z ,那么第一棵线段树是 z 之前的颜色(不包括z),第二棵线段树是 z
阅读全文
摘要:退役选手只能来补数据结构的题解。 我们设当前情况下伤害 d 会触发 cnt[d] 次,那么 ans=R∑i=Lcnt[i] 如果我们能求出来维护好的 cnt 数组的话,用树状数组做前缀和就能询问
阅读全文
摘要:线段树能使用lazy标记需要满足两个条件: 1.区间节点的值可以通过对当前结点lazy标记的计算来更新 2.多次不同的lazy标记可以实现就地的快速合并 线段树学得好,能维护超级多的东西。 CSP 和省选都会用到,建议早点学会 线段树就是将一些区间整体的操作摞到了一块上,精华还是在lazy标
阅读全文
摘要:考虑每个小区间的的贡献,显然是只用到了覆盖了这个小区间的值里面第 k 大。 倘若我们已经知道了覆盖当前区间的值都有多少个,我们就可以在线段树上二分找第 k大。 现在我们并不知道,我们可以用差分+线段树上修改的方法来完成对当前 值的出现次数 的维护。
阅读全文
摘要:首先将区间按照长度排序。用尺取法的思想我们维护双指针来扫描。 左右端点确定后花费就确定了,我们要做的就是看又没有一个位置被覆盖了 m 次。 我们可以将两个指针之间的区间都让其在数轴上 +1 ,看最大值来判断当前是否合法。 转变为 1 .区间加 2 .询问整体最大值。 用线段树维护就好
阅读全文
摘要:忽略数据范围,我们就可以用二分图搞一搞,但事实证明我们并不能忽略(滑稽) Hall定理:对于一个二分图,设左边有个n点,右边有个m点,则左边个点能完全匹配的充要条件是:对于1 include define LL long long define lson (k 1; build(lson,l,mid
阅读全文