随笔分类 - 线段树
摘要:"题目" 线段树。一开始以为是考查lazy数组的变化。然而并不是。 等差数列的性质是相邻的数的差相等,给一段数加上一段相邻的差相等的数列,会发现他们之间的差也会增加,而且相邻的数差增加的是一致的,又因为是单点查询一个数,相当于区间查询差分数组,因此可以用线段树区间修改差分数组,区间查询差分数组。
阅读全文
摘要:扫描线 扫描线问题主要利用了线段树。 因为矩形的并集比较难算,所以我们可以用∑(扫描线被截长度×所扫描的高度)来求和。而这样做发现可以用线段树来优化,具体优化方式如下:所扫描的高度比较好求,主要是扫描线被截长度需要优化。 我们可以设横边有一个a权值,如果该边是矩阵的下边则设为1,相反就设为
阅读全文
摘要:"题目" 其实跟线段树1,2差不多,唯一需要区别的就是lazy数组及标记下传时候的操作了。 线段树左儿子的个数应该是比右儿子的个数大的。所以我们需要再将区间异或时,一定要搞清楚每个区间的元素有多少个,然后再将该区间元素的0,1个数颠倒一下就好了
阅读全文
摘要:"题目" 树剖裸题,这个题更可以深刻的理解树剖中把树上的节点转换为区间的思想。 要注意在区间上连续的节点,一定是在一棵子树中。 c++ include define int long long define ls left, mid, root 1; if (lazy[root]) { ans[ro
阅读全文
摘要:可持久化数组 可持久化数组相比与一般的数组来说多了一个限制条件:可持久化。 原题中的数组则可以用线段树来优化。 而可持久化的暴力解法就是对于每个操作都开一个线段树,可是这样的耗费空间都太多了,因此我们选择动态开点。 动态开点: 定义结构体的时候就不能像普通线段树一样来定义了,应该定义为 我们可以在原
阅读全文