线段树
文章平均质量分 60
。十二。
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【洛谷 2021.11.1团队模拟赛】可重集【线段树】
》》example2解题思路首先,假设所有操作修改的数字都是一样的,那么无论 l,rl,r 怎么取值,每一个删除操作,删除的都是固定的加入操作。考虑预处理出每个删除操作对应的加入操作的时间点。(我处理的很麻烦,排序+栈)线段树:单点修改区间查询考虑把查询的区间按右端点排序,每次按时间线向后更新线段树,若当前时间点是加入操作就在把当前时间点修改为x,如果是删除,若曾经加入过这个点,就在线段数上把这个删除操作对应的加入操作的值修改为1,这样在乘的时候就相当于乘了1,也就是删掉了这个数。查询的...原创 2021-11-06 08:06:49 · 201 阅读 · 0 评论 -
【洛谷 P5522 】棠梨煎雪【线段树】
解题思路区间查询+单点修改=线段树SO,我们考虑维护两个值v,x,对于每一位来讲,一个代表该位是否确定,一个代表该位的值,对于每一位不确定的值,都将该位的值拟为0我们只要知道[l,r][l,r][l,r]里1∼n这些位是否出现过0/1即可,即把[l,r][l,r][l,r]中的信息合并考虑合并的状况:当tree[dep∗2].ok==1tree[dep*2].ok==1tree[dep∗2].ok==1&&tree[dep∗2+1].oktree[dep*2+1].okt...原创 2021-10-06 18:19:33 · 203 阅读 · 0 评论 -
【Ybtoj】【NOIP2021 模拟赛 B 组 Day2】D. 内需消费
解题思路分从左往右和从右往左两个方向差分。例子:定义a[i]a[i]a[i],存放每个商店的价格;定义s1[i]s1[i]s1[i],表示由第i+1到i最多可以赚的钱数;s2[i]s2[i]s2[i],表示由第i-1到i最多可以赚的钱数;s1[i]=max(0,a[i+1]−a[i]);s1[i]=max(0,a[i+1]-a[i]);s1[i]=max(0,a[i+1]−a[i]);s2[i]=max(0,a[i−1]−a[i]);s2[i]=max(0,a[i-1]-a[i]);s2...原创 2021-09-28 20:02:43 · 152 阅读 · 0 评论 -
(纪中)3441. 小喵喵的新家【线段树】【差分】
解题思路本来在题中扇形面积的计算公式是这样的:S扇形=所占的份数2m\frac{所占的份数}{2m}2m所占的份数πr2πr^2πr2由于“你只需要输出 T×2m/πT×2m/πT×2m/π的值即可 ”,所以就变成了:S扇形=所占的份数r2r^2r2把整幅图看作一个半径为100000100000100000的大圆。它被分成了2m2m2m份,我们一份一份求覆盖不小于kkk次的面积。例子:其中一份如图所标,我们红色的扇形被三条毛毯所穿过,题目说被不少于k条毛毯覆盖,那我们就从半径最...原创 2021-08-20 20:47:03 · 113 阅读 · 0 评论 -
(纪中)4769. graph【二分图线段树分治】
解题思路这道题就是二分图线段树分治的板子,把总时长看成总操作数m,每条边对应的时间区间就是他加入的第i个操作到他删掉的第j个操作,如果没有删掉的操作就是i~m。剩下的就和二分图线段树分治板子题一模一样了:link代码#include<iostream>#include<cstdio>#include<algorithm>#include<iomanip>#include<cstring>#include<cmath&...原创 2021-08-18 16:32:16 · 147 阅读 · 0 评论 -
【洛谷 P5787】二分图 线段树分治【二分图】【线段树分治】
解题思路题目大意:一张图有 n 个节点的图, 在 k 时间中会出现 m 条边,表示有一条连接 x,y 的边在 l 时刻出现 r 时刻消失,求问在第 i 个时间段中图是否为二分图。先对于二分图来分析:如果顶点 V 可分割为两个互不相交的子集 (A,B) ,并且图中的每条边 (i,j)所关联的两个顶点 i 和 j 分别属于这两个不同的顶点集 (i∈A,j∈B) ,则称图 G 为一个二分图。 —— 百度百科。在一般的做法中对于一个图是否为二分图,我们一般是采用染色法,如果一个图为二分图,那么一条边...原创 2021-08-18 16:27:20 · 477 阅读 · 0 评论 -
(纪中)3448. 公路维护 【线段树】
解题思路150++的代码量,啊啊啊啊啊,死吧死吧,调了两个小时啊啊,感谢zzl巨爷,不愧是“人间找bug机”。其实题目和算法都很好理解和发现,就是线段树,但是具体实现就很。。维护两个懒标记,加值和最大值(add,lazy),其余就是每种情况 的线段树操作了。操作 1 要先看区间是不是能走的,再减,减完看有没有 < = 0的 就把这段区间标为超大值代码#include<iostream>#include<cstring>#include<strin...原创 2021-07-15 10:57:39 · 156 阅读 · 0 评论 -
【Ybtoj 第17章例5】字符串排序【线段树】
解题思路这道题真的卡了我几个小时。。一开始看思路就没看懂,然后看了标才理解的。。呜呜,我太菜了(首先要理解,tree[k].x存的是最终这个区间中的字符)我们维护每个区间[l,r]的字符x是什么,一开始建树的时候,每个叶子结点都相应的代表一个字符。如果两个子区间的字符都一样,就把他的爸爸的字符状态改为他子区间的字符。然后对于每一次询问,统计询问的区间[ll.rr]中每个字符出现的次数len。当升序排列时,按字典序枚举26个字符,如果这个字符i在[ll.rr]中出现,就把ll~ll+len...原创 2021-05-15 10:41:07 · 319 阅读 · 0 评论 -
【Ybtoj 第17章例4】维护序列【线段树】
解题思路我们考虑用懒标记,当对一个区间打标记时要保证以先乘后加的形式,mul表示乘多少,pul表示加多少,sum表示区间和。下传标记时,sum[lson]∗=mul[fa],sum[rson]∗=mul[fa],sum[lson]+=pul[fa]∗(mid−l+1),sum[rson]+=pul[fa]∗(r−mid)sum[lson]*=mul[fa],sum[rson]*=mul[fa],sum[lson]+=pul[fa]*(mid-l+1),sum[rson]+=pul[fa]...原创 2021-05-15 10:17:56 · 168 阅读 · 0 评论 -
【Ybtoj 第17章例3】小白逛公园【线段树】
解题思路我们对线段树的每个节点维护几个信息:sum(区间和),maxx(区间最大子段和),lmax(从区间左端点开始的最大子段和),rmax(从区间右端点开始的最大子段和)。用fa表示当前区间,lson,rson表示其左右区间,我们可以得到如下转移:sum[fa]=sum[lson]+sum[rson]sum[fa]=sum[lson]+sum[rson]sum[fa]=sum[lson]+sum[rson]最大子段和要么全在左区间,右区间,或者左右均有,取最大转移:maxx[fa]=...原创 2021-05-15 10:05:57 · 195 阅读 · 0 评论 -
【Ybtoj 第17章例2】区间查改【线段树】
解题思路还是模板题,直接上线段树的区间修改,区间查询。代码#include<iostream>#include<cstdio>#include<iomanip>#include<cstring>#include<algorithm>#include<cmath>#include<queue>using namespace std;int n,q,k,a,b,w,add[4000010],...原创 2021-05-15 09:45:48 · 192 阅读 · 0 评论 -
【Ybtoj 第17章例1】求区间和【线段树】
解题思路线段树之前打过几道模板题,然后就没用过了,这次又学了一遍,希望之后可以用到。。这道题是道模板题,直接上线段树的单点修改,区间查询。博客详见:板子题+详解.代码#include<iostream>#include<cstdio>#include<iomanip>#include<cstring>#include<algorithm>#include<cmath>#include<queue...原创 2021-05-15 08:53:19 · 154 阅读 · 0 评论 -
线段树练习五
Time Limit:10000MS Memory Limit:65536KTotal Submit:94 Accepted:52Case Time Limit:1000MSDescription一行N个方格,开始每个格子里的数都是0。现在动态地提出一些问题和修改:提问的形式是求某一个特定的子区间[a,b]中所有元素的和;修改的规则是指定某一个格子x,加上或者减去一个特定的值A。现在要求你能对每个提问作出正确的回答。1≤N≤100000,提问和修改的总数可能达到100000条。Input2原创 2020-07-22 10:51:57 · 177 阅读 · 0 评论 -
线段树练习四
Time Limit:10000MS Memory Limit:65536KTotal Submit:126 Accepted:47Case Time Limit:1000MSDescription在平面内有一条长度为nnn的线段(不计入答案),可以对进行以下222种操作:1、把从xxx到yyy的再加一条线段2、查询从xxx到x+1x+1x+1有多少条线段Input第一行输入n,mn,mn,m第2 m+12~m+12 m+1行,每行222个数x,yx,yx,y,表原创 2020-07-22 10:38:14 · 144 阅读 · 0 评论 -
线段树练习题三
Time Limit:10000MS Memory Limit:65536KTotal Submit:143 Accepted:45Case Time Limit:1000MSDescription给定一条长度为mmm的线段,有nnn个操作,每个操作有333个数字x,y,zx,y,zx,y,z表示把区间[x,y][x,y][x,y]染成颜色zzz,询问染完色之后,这条长度为mmm的线段一共有几种颜色。规定:线段的颜色可以相同。连续的相同颜色被视作一段。问xxx轴被分成多少段。InputOu原创 2020-07-21 20:35:27 · 122 阅读 · 1 评论 -
线段树练习题二
Time Limit:10000MS Memory Limit:65536KTotal Submit:154 Accepted:85Case Time Limit:1000MSDescription桌子上零散地放着若干个不同颜色的盒子,桌子的后方是一堵墙。如右图所示。问从桌子前方可以看到多少个盒子?假设人站得足够远(输入时,由底向上,从左到右)。InputOutputSample Input16 //桌子长度5 // 盒子数量4 712 141 56 1011 16原创 2020-07-21 18:50:24 · 149 阅读 · 3 评论 -
线段树练习题一
Time Limit:10000MS Memory Limit:65536KTotal Submit:228 Accepted:76Case Time Limit:1000MSDescription桌子上零散地放着若干个盒子,桌子的后方是一堵墙。如右图所示。现在从桌子的前方射来一束平行光, 把盒子的影子投射到了墙上。问影子的总宽度是多少?InputOutputSample Input20 //桌面总宽度4 //盒子数量1 53 87 1013 19Sample原创 2020-07-21 18:38:39 · 164 阅读 · 0 评论
分享