线段树
sedcftyv
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
2020牛客多校第八场A All-Star Game 线段树+可撤销并查集
1.球员编号从1-n,球迷编号从1-m,有重叠部分,可以将球迷编号整体加n. 2.求最小球员个数等于求球迷的连通分量数,如果某个球迷的度为0表示没有喜欢的球员,此时无解输出-1. 3.变量con表示度为0的球迷的数量,初始值为m,用来判断是否无解,变量ans表示球迷的连通分量数,初始值为m. 4.先将初始状态直接存入map中,key为边,value为边存在的起始时间1. 5.输入修改时,在map中查询是否有这条边,如果有表示此次为删边修改,向线段树插入这条边,插入区间为这条边的存...原创 2020-08-13 21:13:02 · 277 阅读 · 0 评论 -
可撤销并查集
解决在树上加边或删边后的两点联通性问题,线段树线段表示时间,结点存储这个时间段内存在的边,线段树使用区间修改,单点查询.查询时先把每个结点储存的边的两端利用并查集合并,离开时需要利用栈进行撤销.#include<iostream>#include<cstdio>#include<cstring>#include<map>#include<vector>#include<stack>using namespace st.原创 2020-08-13 12:55:32 · 613 阅读 · 0 评论 -
线段树
单点修改 无需lazy标记,直接写,此时每个点存这个区间对应的答案.区间修改,单点查询 修改被修改区间包括的区间,查询时一路加到底.此时每个点并没有直接存这个区间对应的答案.区间修改,区间查询 需要lazy标记或者标记永久化,此时每个点不一定存的这个区间对应的答案...原创 2020-08-04 20:42:01 · 112 阅读 · 0 评论 -
线段树区间最大连续子段和
区间最大连续字段线段树多维护三个值:当前区间从左端开始最大连续和cl,从右端开始最大连续和cr,区间内最大连续和mcl等于max(左子区间和s+右子区间cl,左子区间cl)cr等于max(右子区间和s+左子区间cr,右子区间cr)m等于max(左子区间m,右子区间m,左子区间cr+右子区间cl)查询时返回区间段并不断合并。struct node{ int s,c...原创 2019-11-10 15:25:44 · 406 阅读 · 0 评论 -
线段树区间离散方法
将所有区间的左右端点存入数组,并从小到大排序,再去重,遍历数组,若两个相邻元素差值不为1,在数组末尾插入两元素中的最小值加一,再排序一次。 遍历原区间,取数组中等于该值的元素位置的下标加1作为离散后的区间端点即可。 for(int i=1;i<=n;++i) { scanf("%d%d",&st[i],&ed[i])...原创 2019-08-25 18:46:23 · 105 阅读 · 0 评论 -
区间元素种类(HH的项链)
HH的项链将所有区间读入,按右端从小到大排序。 从左至右扫描,当前元素上一次出现的位置对应线段树中的结点值全部减一,更新当前元素此次出现的位置(确保相同元素在树上只存在当前最右的一个),查询所有区间右端为当前位置的区间,求出这些区间内的元素种类。 按输入顺序输出。核心思想:去重时保留最右的,线段树结点直接存储元素种类。#include<iostream>#includ...原创 2019-09-27 20:22:54 · 355 阅读 · 0 评论 -
乘法+加法lazy标记(维护序列)
坑点:区间可能乘0,不能用乘法标记大于1作为下传条件,下传条件应该为乘法标记不等于1。做法:维护标记时,操作为乘:乘法标记直接修改,加法标记也要乘操作数;操作为加:只改加法标记。下传标记时:分别修改两个子节点的值,先下传乘法标记,再下传加法标记。#include<iostream>#include<cstdio>#include<cstring>...原创 2019-09-27 23:53:22 · 168 阅读 · 0 评论 -
二维线段树
线段树套线段树数组开二维,外层结点不存值,内层结点存储区间内数之和,更新内层和普通线段树相同,更新外层线段树底层结点和其他结点不同。#include<iostream>#include<cstdio>#include<cstring>using namespace std;int tree[2000][2000],Mat[512][512];...原创 2019-10-05 13:09:39 · 169 阅读 · 0 评论 -
2018-2019 ACM-ICPC Asia Seoul Regional Contest A Circuits Gym - 101987A (线段树+lazy标记)
用线段树做这题至少有两种写法 输入数据的离散,建树,求每个离散后的纵坐标穿过的矩形数都一样,不同的地方在遍历纵坐标求答案。 线段树存的是lazy标记和区间内最大值 1.输入矩形的横坐标没用,只要储存纵坐标。坐标范围达到10的7次方,故先离散化。把每个矩形表示成纵坐标对应的线段即可 2.在线段树中把这些区间值加一(建树),注意要用lazy标记,顺便分别...原创 2019-10-10 00:06:35 · 415 阅读 · 0 评论
分享