线段树
࿐ཉི༗࿆一鲸落,万物生 ༗࿆ཉི࿐
这个作者很懒,什么都没留下…
展开
-
2021牛客多校7 F题: xay loves trees
下面就是要深度遍历第一颗树,遍历的过程中因为是深搜,所以保证搜到的点都是一条链上的,是满足任意两个点互为祖先的,那就要判断在第二棵树中对应的结点是否满足条件,如果新加入的点满足条件,那么更新子集大小,如果不满足条件,每次从链首取出1个结点,子集大小不变,这里用的是树上滑动窗口的思想。具体为什么可以去看一下这位大佬的博客。在第一棵树中,子集中的点相互连通,且对于任意两点u,v其中一个点必定是另一个点的祖先;在第二棵树中,对于任意两点u,v,u不是v的祖先,v也不是u的祖先;...原创 2022-07-17 18:08:18 · 141 阅读 · 0 评论 -
Acwing 245. 你能回答这些问题吗
解题思路:一开始表示线段树的结构体中只有l,r,要维护当前区间的最大子段和,那么向其中加入表示最大子段和的变量tmax,然后我们考虑如何从下往上去更新tmax,发现以我们现在的变量无法对其进行更新,那么来看一下当前区间的最大子段和等于什么,其应该等于左子树的最大子段和,右子树的最大子段和,还有一种可能是最大子段和横跨左右两个区间,这种情况下最大子段和就等于左区间的最大后缀和+右区间的最大前缀和,这样以来tmax可以得到更新了,但是又多出来2个变量,最大前缀和lmax,最大后缀和rmax,这两个变量...原创 2022-04-04 21:20:42 · 508 阅读 · 0 评论 -
Acwing 1228. 油漆面积(线段树+扫描线)
解题思路:给定一个矩形,将矩形的左右两条边所在的直线进行延长,对整个区域进行划分,这就是扫描线名字的由来,每一条扫描线都是一颗线段树,它与一般有懒标记的线段树有一下几个区别:1、扫描线中每个点代表的是一个线段,具体到这个题中就是每次给我们一个矩形的信息,我们可以对它构建出一个三元组(x1,y1,y2),(x2,y1,y2),如下图所示其中记录x的作用是用来确定当前扫描线被计算的顺序的,y1,y2可以用来表示当前的那一段要进行覆盖,在x1处要对[y1,y2-1]这一段的覆盖次数加一,表...原创 2022-04-01 12:32:14 · 343 阅读 · 0 评论 -
第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(昆明)Simone and graph coloring
题目大意:给你t组测试数据,每一组有n个数,这n个数中每一对逆序对可以建一条无向边,由此可以得到一张图,规定每两个相连的点不能染成同一个颜色,问最少需要几种颜色,以及每一个点应该被染成什么颜色。思路:这个题的做法有很多种,比如线段树啊什么的,这里先是把他当成一个思维题做的。具体细节看代码注释。#include <iostream>#include <cstring>#include <cstdio>#include <cmath>usin..原创 2021-11-06 17:14:22 · 216 阅读 · 0 评论 -
第K小数——初识主席树
大体的思路和前一篇的可持久化字典树差不多,甚至可能还要简单一点,一些需要注意的地方已经在代码中标注出来了,大家可以看一下代码。#include <iostream>#include <cstring>#include <cstdio>#include <algorithm>#include <vector>using namespace std;const int N=1e5+10,M=1e4+10;int n,m;int..原创 2021-10-23 17:21:33 · 72 阅读 · 0 评论