线段树
文章平均质量分 85
EQSAN
蒟蒻RP++
展开
-
线段树(由浅入深),详解!!
线段树详解 线段树,顾名思义,由线段构成的树;非常实用的数据结构; 线段树由浅入深分为三各层次 1.单点修改+区间查询 2.区间修改+单点查询 3.区间修改+区间查询 1单点修改+区间查询 先上问题: codvs1080 读完题可能大家有很多方法,但面对庞大的数据,会发现都略有欠缺,所以就轮到线段树上场了; 假设数列为1 2 3 4 5 6 7 8 那么线段树就是这样的 每个节点维护某个区间的左端...原创 2019-02-14 23:57:32 · 386 阅读 · 0 评论 -
洛谷P3373线段树2
题目描述 区间查询区间修改,非常明显的线段树模板,但乘法和加法的结合,使问题有了些小改动; problem: 该题唯一的难点就是加法和乘法的lazytag的处理,设目前区间N.s(即区间和)=x,若先加b再乘a,则N.s=(x+b)*a=ax+ab,若先乘a再加a,那么N.s=ax+b . 所以,假若有multag(乘法懒惰标记)=a,addtag(加法懒惰标记)=b,且一般情况下我们不知道乘和加...原创 2019-02-19 16:16:42 · 170 阅读 · 0 评论 -
codvs4927线段树练习5(set+add) 138 行 简洁
题目链接 与仅有add操作的线段树不同,多了set操作,而set的优先级高于add,set会将以前的add操作所得的价值覆盖掉,而add只会在以前的set基础上继续,故set优先级较高。 既然set优先级高,那么就要区别对待set和add,引入变量ap和sp分别表示add和set的标记,若该节点有sp那么清空 ...原创 2019-07-26 11:43:44 · 169 阅读 · 0 评论 -
codvs4919线段树练习4
题目链接 将区间和s改为s[7] 表示该区间除以7余0–6的数的个数,push_dwon的时候对于每个s[i]进行更新即可 代码如下 #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<vec...原创 2019-07-26 11:51:20 · 95 阅读 · 0 评论 -
洛谷P2572 [SCOI2010]序列操作
题目链接 题意: 三种修改操作 1.set_1:区间置1 2.set_0:区间置0 3.change:区间翻转 两种询问 1.询问区间有多少个1,即为区间求和 2.区间最长1111串(重难点) 解题方法: 不考虑求区间最长1串的询问就是个基本的线段树模板,注意set优先级较大,push_down的时候需保证每次只有一个懒惰标记(tags为set的懒标记,tag=0即为set_1,反之set_0,t...原创 2019-08-10 17:46:39 · 160 阅读 · 0 评论