线段树

线段树 Segment tree 是一种二叉树形数据结构,1977年由 Jon Louis Bentley发明,用以存储区间或线段,并且允许快速查询结构内包含某一点的所有区间。

🌳 SegmentTree

先贴一段洛谷P3373的线段树模板:

题目描述
如题,已知一个数列,你需要进行下面三种操作:

将某区间每一个数乘上 xx

将某区间每一个数加上 xx

求出某区间每一个数的和

输入格式
第一行包含三个整数 n,m,p,分别表示该数列数字的个数、操作的总个数和模数。

第二行包含 n 个用空格分隔的整数,其中第 i 个数字表示数列第 i 项的初始值。

接下来 m 行每行包含若干个整数,表示一个操作,具体如下:

操作 1: 格式:1 x y k 含义:将区间 [x,y] 内每个数乘上 k

操作 2: 格式:2 x y k 含义:将区间 [x,y] 内每个数加上 k

操作 3: 格式:3 x y 含义:输出区间 [x,y] 内每个数的和对 p 取模所得的结果

比较核心的操作有两个:push_up负责将两个子区间的结果合并到父区间,而push_down负责更新子区间的结果值、子区间的lazytag以及将父区间的lazytag重置(而不是归零)

最后更新于

这有帮助吗?