![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
线段树
文章平均质量分 55
ssl_fuyang
ヾ(◍°∇°◍)ノ゙
展开
-
可重集【线段树】
>Linkluogu T202677>Descriptionn,m≤3∗105n,m\le3*10^5n,m≤3∗105>解题思路一开始想到了线段树,但是不知道怎么处理QwQ 感觉线段树是错的就没继续想了(特别是那个模数可能是合数)我们可以发现实际上对于同一个操作,操作一和操作二是一一对应的那我们就预处理先把他们对应起来线段树肯定是在时间上面建的如果遇到加操作,就在线段树上对应的位置修改成x如果遇到减操作,就在这个减操作对应的加操作的位置上,把他修改成1(在加操作原创 2021-11-02 09:55:22 · 124 阅读 · 0 评论 -
线段树 3(区间最值与历史最值)【线段树】
>Linkluogu P6242>Description>解题思路这个大佬写的好好%%对于每个节点,我们维护:当前最大值,当前次大值,历史最大值,历史次大值(这道题好像不用用到这个),当前最大值的个数,区间和,和四个懒标记四个懒标记分别为:lazy1:当前最大值要加上的值lazy2:历史最大值要加上的值lazy3:当前非最大值要加上的值lazy4:历史非最大值要加上的值加操作:全部都加上取min操作:考虑要取的min值valvalval的不同情况。valv原创 2021-10-21 15:39:56 · 494 阅读 · 0 评论 -
线段树2(加法与乘法)【线段树】
>Linkluogu 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 · 200 阅读 · 0 评论 -
扫描线【模板】【线段树】【离散化】
>Linkluogu 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 · 77 阅读 · 0 评论 -
生日【线段树】
>Linkluogu 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 · 159 阅读 · 0 评论 -
二进制【线段树】
>Linkluogu U137918>Description对于100%的数据,01串长度<=200000,N<=200000>解题思路对二进制数的一段进行排序的话,排出来的那一段就是形如 0000011111 或 11111100000那我们只要知道这一段的1的个数(0的个数也可以),然后把这一段分成两个区间,分别对两个区间里所有的值赋值然后这不就是线段树吗(麻了,真不知道我比赛的时候为什么妹想到QAQ还有一个操作是对二进制的一段取值,那我们也可以在线段原创 2021-09-28 21:22:35 · 125 阅读 · 0 评论 -
二分图 / 线段树分治【线段树分治】【可撤销并查集】【启发式合并】
>Linkjzoj4769>Description现在给定一个无向图,每次增加一条边,或者删除一条边。要求您每次判断它是不是二分图。>解题思路不知道为什么RE了,本地调试好像是vector爆了??调不出来,先挂在这里>代码#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <vector&g原创 2021-08-17 08:05:36 · 141 阅读 · 0 评论 -
公园遛狗 / 小白逛公园【线段树】
>Linkybtoj公园遛狗luogu P4513>解题思路这道题我做的时候只想到了build、insert怎么写,ask看了书以后写的(真的好巧妙T)单点修改+区间查询使我们想到了线段树但是简单的线段树是不能实现的,因为我们要求的是 最大区间和我们知道在一个大区间内,最大区间和有一下三种midmidmid分布情况:情况1、2:直接从左/右儿子转移过来,取max值情况3:我们要知道左儿子的最大连续后缀和,右儿子的最大连续前缀和所以我们要维护线段树中的 总和sumsumsu原创 2021-07-06 20:51:03 · 124 阅读 · 0 评论 -
区间查改【线段树】
>Linkybtoj区间查改luogu P3372>解题思路线段树的模板题,加上lazy懒标记优化我一开始WA了,改了好久,结果发现是数组开小了我服了啊>代码#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#define N 1000010#define LL long longusing namespace st原创 2021-07-06 16:00:45 · 66 阅读 · 0 评论 -
求区间和【线段树】
>Linkybtoj求区间和>解题思路线段树模板>代码#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#define N 100010#define LL long longusing namespace std;int n, m;LL t[3 * N];void insert (int k, int l,原创 2021-07-06 09:36:55 · 58 阅读 · 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 · 106 阅读 · 0 评论 -
线段树练习题二【线段树】
>Description桌子上零散地放着若干个不同颜色的盒子,桌子的后方是一堵墙。如右图所示。问从桌子前方可以看到多少个盒子?假设人站得足够远(输入时,由底向上,从左到右)。>Input第一行输入一个整数n,表示桌面总宽度第二行输入一个整数m,表示盒子数量接下来m行,每行输入两个数x,y,表示第i个盒子的起始位置和终止位置>Output阴影宽度>Sam...原创 2019-08-20 09:21:31 · 141 阅读 · 0 评论 -
线段树练习题一【线段树】
>Description桌子上零散地放着若干个盒子,桌子的后方是一堵墙。如右图所示。现在从桌子的前方射来一束平行光, 把盒子的影子投射到了墙上。问影子的总宽度是多少?>Input第一行输入一个整数n,表示桌面总宽度第二行输入一个整数m,表示盒子数量接下来m行,每行输入两个数x,y,表示第i个盒子的起始位置和终止位置>Output阴影宽度>Sample ...原创 2019-08-19 15:59:09 · 146 阅读 · 0 评论 -
线段树练习五【线段树】
>Description一行N个方格,开始每个格子里的数都是0。现在动态地提出一些问题和修改:提问的形式是求某一个特定的子区间[a,b]中所有元素的和;修改的规则是指定某一个格子x,加上或者减去一个特定的值A。现在要求你能对每个提问作出正确的回答。1≤N≤100000,提问和修改的总数可能达到100000条。>Input第一行输入整数n第二行输入整数m,表示提问和修改的总数...原创 2019-08-19 11:19:42 · 143 阅读 · 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 · 658 阅读 · 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 · 224 阅读 · 0 评论