![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
线段树
吴俊达9812
这个作者很懒,什么都没留下…
展开
-
洛谷 P2023 维护序列
思路:线段树,懒惰标记下传需注意 #include <bits/stdc++.h> using namespace std; typedef long long LL; const LL maxn = 100000 + 100; LL n,a[maxn],p; struct segment_tree{ LL l,r,laz1,laz2,sum; segment_tr...原创 2019-04-28 11:04:53 · 210 阅读 · 0 评论 -
codeforces 787D (线段树建图+dij)
题意: 现在有n个点,有一个起始点,你要求出从起始点到其他点的最短路,那么这就是一个很简单的最短路问题,但是麻烦的地方在建图,普通的建图这里肯定是不行的。因为这里有三种操作,第一 从u到v 加一条边,权值 为w 第二 从u到 l,r 的点都可以,权值为w ,第三 从 l,r 到u点,权值为w 。那么对于这种区间,我们可以用线段树建图的方法, 这里方法是: 建立两颗线段树 A线段树每个节点和...原创 2019-09-27 11:48:37 · 113 阅读 · 0 评论 -
codeforces 343D - Water Tree
题意:题意:给你一颗以点1为根的数,有两种操作,一种是把x及其子树的所有点都灌满水,一种是把x及其所有祖先都放空水,一种是询问,问某个点里有没有水? 思路:线段树维护最晚浇水时间和最晚清空时间。 #include <bits/stdc++.h> #define lc l,mid,x<<1 #define rc mid+1,r,x<<1|1 #define ...原创 2019-09-26 22:17:45 · 99 阅读 · 0 评论 -
codeforces 19D
题意: n个操作,在200000*200000的平面上加删点 find 严格在坐标右上角,x最小,再y最小的点 思路:线段树套set,注意这种线段树二分的复杂度也是log。 #include <bits/stdc++.h> #define ls x<<1 #define rs x<<1|1 #define lc l,mid,x<<1 #de...原创 2019-09-26 21:32:15 · 113 阅读 · 0 评论 -
luogu P4137 mex
题意:给定一个数列,查询一些区间的mex 思路:离线 ,询问排序,左端点向右移动,进行区间递推。 #include <bits/stdc++.h> #define lc l,mid,x<<1 #define rc mid+1,r,x<<1|1 #define ls x<<1 #define rs x<<1|1 #define fi ...原创 2019-09-26 19:29:09 · 89 阅读 · 0 评论 -
codeforces 877E - Danil and a Part-time Job
dfs序 + 线段树 (区间修改时dfs序 不要打出去的标记,而是记录子树的size) #include <bits/stdc++.h> #define lc l,mid,x<<1 #define rc mid+1,r,x<<1|1 #define ls x<<1 #define rs x<<1|1 using namespace s...原创 2019-09-13 21:14:25 · 193 阅读 · 0 评论 -
银川网络赛 A
分位维护线段树。 laz标记的理解。 区间恰好覆盖时打标记。与下面子树的无关。只有下放时需要考虑当前节点和子树。这时当前节点的laz标记还没有影响到叶子节点,只需要下放影响即可,这样当前节点的影响就与子树未下放的影响就融合在一起了。其实laz标记记录的就是修改而已,将当前节点的修改下放到子树中去,下放后当然要把修改清0。线段树每个节点的修改是一定相同的,所以只需要考虑修改的叠加影响即可。 #...原创 2019-09-08 20:06:29 · 105 阅读 · 0 评论 -
codeforces educational round 68 E - Count The Rectangles
这个代码不太好写,应该是我的方法丑了吧。 我的思路是将答案按照下边界所属的线段进行分类。 首先,我们提取出所有的横线,并按照y值排序。对于每一条横线 p,我们从小到大枚举y值大于他的横线 q(类似于扫描线的思想)。并用线段树维护对于当前的横线q,竖线的下端点纵坐标小于横线p的纵坐标,并且上端点的y值大于等于横线q的y值的竖线的x值。然后答案的统计就是查询两条横线相交的区间内竖线的个数 x 。...原创 2019-07-15 22:04:10 · 211 阅读 · 0 评论 -
2019中国大学生程序设计竞赛 Tree
树剖,维护区间最大值以及区间和,最大值为1的时候就不需要下传更改了。 #include<bits/stdc++.h> #define lc l,mid,x<<1 #define rc mid+1,r,x<<1|1 using namespace std; typedef long long LL; typedef int lint; const lint ...原创 2019-07-14 18:10:55 · 261 阅读 · 0 评论 -
C2 - Heidi and the Turing Test (Medium)
考虑一个矩形可覆盖一个点的矩形的右上角的位置,我们发现是一个矩形。那么被矩形覆盖次数最多的点就是矩形的右上角。 问题转化为被矩形覆盖次数最多的矩形被覆盖了多少次。 #include <bits/stdc++.h> #define lc l,mid,x<<1 #define rc mid+1,r,x<<1|1 using n...原创 2019-07-13 22:02:54 · 286 阅读 · 0 评论 -
2019浙江省赛 A-Vertices in the Pocket
题意:无向图 修改加查询 修改:在无向图中加边( 保证简单图:无重边和自环 ) 查询:加x条边(保证加完还是简单图),最多和最少的连通分量 思路: 首先思路很好想,连通块尽量少就是连一条边减少一个连通分量。连通块尽量多就是在原有的连通分量中进行加边。 加满了就需要在两个连通块之间进行连边,我们当然希望在两个大的连...原创 2019-05-09 20:36:28 · 151 阅读 · 0 评论 -
Codeforces - 1136 - E. Nastya Hasn't Written a Legend
题意: 有一串数组a和数组k,数组初始保证a[i]+k[i]≤a[i+1]。一共有两种操作: 查询区间和 对第i位加上x,如果a[i]+k[i]>a[i+1],则a[i+1]=a[i]+a[k],并一直往后。 思路:变形得到 a[ i+1 ] - k[ i ] < a[ i ] ----> a[ i+1 ] - k[ i ] - k[ i-1 ] -...-k[1] &...原创 2019-09-27 14:29:18 · 130 阅读 · 0 评论