初级数据结构

发布时间 2023-06-17 16:46:02作者: Liooooo

线段树

1.线段树 1

区间加、区间求和

代码

2.线段树 2

区间加、区间乘、区间求和

再开一个乘法标记就行。

注意区间乘的时候该区间的加法tag也要乘

push_down的时候同样加法tag也要乘

!再注意乘法标记初值和push_down后都应该设为1

代码

3.[JSOI2008]最大数

区间max(min)

其实只要改改query函数就够了

代码

被while循环坑了一手。

4.[TJOI2009]开关

tre还是维护区间和

考虑维护一个tag表示当前区间被修改了几次

发现其实只与奇偶性有关,偶数次修改相当于没修改,所以下传标记时只需儿子的标记异或当前的标记

注意当前标记为0时不需下传

代码

5.无聊的数列

将操作转换为对差分数组操作即可用线段树维护

代码

6.扶苏的问题

维护两个tag分别表示修改操作和加法操作

下传时先传修改tag并且清空加法tag。

代码 初值开的大一点。

7.小白逛公园

每个点需要维护最大前缀和、最大后缀和、最大子段和

合并时分类讨论即可。

需要注意的是查询时也要类似合并进行操作,因为并不能像之前的题一样直接合并查询

代码

8.方差

再维护一个区间平方和。

代码

权值线段树

其实就是对原序列的各个数出现的次数统计后存入权值数组

对权值数组进行一些线段树操作。