
线段树
文章平均质量分 55
ssl_fuyang
ヾ(◍°∇°◍)ノ゙
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
可重集【线段树】
>Link luogu T202677 >Description n,m≤3∗105n,m\le3*10^5n,m≤3∗105 >解题思路 一开始想到了线段树,但是不知道怎么处理QwQ 感觉线段树是错的就没继续想了(特别是那个模数可能是合数) 我们可以发现实际上对于同一个操作,操作一和操作二是一一对应的 那我们就预处理先把他们对应起来 线段树肯定是在时间上面建的 如果遇到加操作,就在线段树上对应的位置修改成x 如果遇到减操作,就在这个减操作对应的加操作的位置上,把他修改成1(在加操作原创 2021-11-02 09:55:22 · 179 阅读 · 0 评论 -
线段树 3(区间最值与历史最值)【线段树】
>Link luogu P6242 >Description >解题思路 这个大佬写的好好%% 对于每个节点,我们维护:当前最大值,当前次大值,历史最大值,历史次大值(这道题好像不用用到这个),当前最大值的个数,区间和,和四个懒标记 四个懒标记分别为: lazy1:当前最大值要加上的值 lazy2:历史最大值要加上的值 lazy3:当前非最大值要加上的值 lazy4:历史非最大值要加上的值 加操作:全部都加上 取min操作:考虑要取的min值valvalval的不同情况。valv原创 2021-10-21 15:39:56 · 666 阅读 · 0 评论 -
线段树2(加法与乘法)【线段树】
>Link luogu P3373 >Description 如题,已知一个数列,你需要进行下面三种操作: 将某区间每一个数乘上 x 将某区间每一个数加上 x 求出某区间每一个数的和 >解题思路 主要就是考虑如何在线段树上处理乘法和加法的优先级,就是懒标记上的乘法加法先处理哪一个 假设先加bbb,再乘ccc 那我们得到的就是 (a+b)∗c=a∗c+b∗c(a+b)*c=a*c+b*c(a+b)∗c=a∗c+b∗c 如果先乘后加的话就是 a∗c+ba*c+ba∗c+b,那我们发现我们把原创 2021-10-20 11:58:17 · 302 阅读 · 0 评论 -
扫描线【模板】【线段树】【离散化】
>Link luogu P5490 >Description 求 nnn(n≤105n≤10^5n≤105) 个矩形的面积并。 >解题思路 离散化就是烦,打错了一个地方找了好久QAQ 我们把每个矩形记录成两条垂直于x轴的边(左右边界),左边的边权值为1,右边的边权值为-1;边的坐标(x,y1),(x,y2) 然后把边从左到右排个序 然后再从左到右扫描过去,遇到边就在它所在的区域[y1,y2][y1,y2][y1,y2]加上它的权值 把坐标离散化一下,标记离散化后的坐标x原来的坐标为ra原创 2021-10-20 08:49:41 · 141 阅读 · 0 评论 -
生日【线段树】
>Link luogu U137441 >Description 今天是牛牛的生日,牛牛请了他的好朋友们一起过生日,生日必不可少的环节当然就是吃蛋糕啦。由于有n个人来参 加牛牛的生日,牛牛需要给n个人分蛋糕,牛牛有2种操作 C l r x 将[l,r]的人的蛋糕数改成x(1 <= x <= k) P l r 查询[l,r]中有多少种不同的蛋糕数 牛牛总共执行了m次这样的操作,请输出所有的询问操作 对于100%的数据:1<= l <= r <= n <= 10原创 2021-09-29 21:20:57 · 286 阅读 · 0 评论 -
二进制【线段树】
>Link luogu U137918 >Description 对于100%的数据,01串长度<=200000,N<=200000 >解题思路 对二进制数的一段进行排序的话,排出来的那一段就是形如 0000011111 或 11111100000 那我们只要知道这一段的1的个数(0的个数也可以),然后把这一段分成两个区间,分别对两个区间里所有的值赋值 然后这不就是线段树吗(麻了,真不知道我比赛的时候为什么妹想到QAQ 还有一个操作是对二进制的一段取值,那我们也可以在线段原创 2021-09-28 21:22:35 · 199 阅读 · 0 评论 -
二分图 / 线段树分治【线段树分治】【可撤销并查集】【启发式合并】
>Link jzoj4769 >Description 现在给定一个无向图,每次增加一条边,或者删除一条边。要求您每次判断它是不是二分图。 >解题思路 不知道为什么RE了,本地调试好像是vector爆了??调不出来,先挂在这里 >代码 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <vector&g原创 2021-08-17 08:05:36 · 203 阅读 · 0 评论 -
公园遛狗 / 小白逛公园【线段树】
>Link ybtoj公园遛狗 luogu P4513 >解题思路 这道题我做的时候只想到了build、insert怎么写,ask看了书以后写的(真的好巧妙T) 单点修改+区间查询使我们想到了线段树 但是简单的线段树是不能实现的,因为我们要求的是 最大区间和 我们知道在一个大区间内,最大区间和有一下三种midmidmid分布情况: 情况1、2:直接从左/右儿子转移过来,取max值 情况3:我们要知道左儿子的最大连续后缀和,右儿子的最大连续前缀和 所以我们要维护线段树中的 总和sumsumsu原创 2021-07-06 20:51:03 · 172 阅读 · 0 评论 -
区间查改【线段树】
>Link ybtoj区间查改 luogu P3372 >解题思路 线段树的模板题,加上lazy懒标记优化 我一开始WA了,改了好久,结果发现是数组开小了我服了啊 >代码 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #define N 1000010 #define LL long long using namespace st原创 2021-07-06 16:00:45 · 114 阅读 · 0 评论 -
求区间和【线段树】
>Link ybtoj求区间和 >解题思路 线段树模板 >代码 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #define N 100010 #define LL long long using namespace std; int n, m; LL t[3 * N]; void insert (int k, int l,原创 2021-07-06 09:36:55 · 88 阅读 · 0 评论 -
线段树练习题三【线段树】
>Description 给定一条长度为m的线段,有n个操作,每个操作有3个数字x,y,z表示把区间[x,y]染成颜色z,询问染完色之后,这条长度为m的线段一共有几种颜色。规定:线段的颜色可以相同。连续的相同颜色被视作一段。问x轴被分成多少段。 >Input 第一行输入两个整数N,M,表示有N个操作,长度为M的线段 接下来N行,每行输入三个整数a,b,c,表示区间a~b染上颜色c ...原创 2019-08-20 16:53:02 · 142 阅读 · 0 评论 -
线段树练习题二【线段树】
>Description 桌子上零散地放着若干个不同颜色的盒子,桌子的后方是一堵墙。如右图所示。问从桌子前方可以看到多少个盒子?假设人站得足够远(输入时,由底向上,从左到右)。 >Input 第一行输入一个整数n,表示桌面总宽度 第二行输入一个整数m,表示盒子数量 接下来m行,每行输入两个数x,y,表示第i个盒子的起始位置和终止位置 >Output 阴影宽度 >Sam...原创 2019-08-20 09:21:31 · 197 阅读 · 0 评论 -
线段树练习题一【线段树】
>Description 桌子上零散地放着若干个盒子,桌子的后方是一堵墙。如右图所示。现在从桌子的前方射来一束平行光, 把盒子的影子投射到了墙上。问影子的总宽度是多少? >Input 第一行输入一个整数n,表示桌面总宽度 第二行输入一个整数m,表示盒子数量 接下来m行,每行输入两个数x,y,表示第i个盒子的起始位置和终止位置 >Output 阴影宽度 >Sample ...原创 2019-08-19 15:59:09 · 187 阅读 · 0 评论 -
线段树练习五【线段树】
>Description 一行N个方格,开始每个格子里的数都是0。现在动态地提出一些问题和修改:提问的形式是求某一个特定的子区间[a,b]中所有元素的和;修改的规则是指定某一个格子x,加上或者减去一个特定的值A。现在要求你能对每个提问作出正确的回答。1≤N≤100000,提问和修改的总数可能达到100000条。 >Input 第一行输入整数n 第二行输入整数m,表示提问和修改的总数 ...原创 2019-08-19 11:19:42 · 203 阅读 · 0 评论 -
最大值【线段树】
>Description 在N(1<=N<=100000)个数A1…An组成的序列上进行M(1<=M<=100000)次操作,操作有两种: (1)1 x y:表示修改A[x]为y; (1)2 x y:询问x到y之间的最大值。 >Input 第一行输入N(1<=N<=100000),表示序列的长度,接下来N行输入原始序列;接下来一行输入M(1<...原创 2019-07-12 07:58:53 · 772 阅读 · 6 评论 -
最大值2.0(新版)【线段树】
>Description 在N(1<=N<=100000)个数A1…An组成的序列上进行M(1<=M<=100000)次操作,操作有两种: (1)1 L R C:表示把A[L]到A[R]增加C(C的绝对值不超过10000); (2)2 L R:询问A[L]到A[R]之间的最大值。 >Input 第一行输入N(1<=N<=100000),表示序列的长...原创 2019-07-12 21:49:47 · 302 阅读 · 0 评论