关于线段树

Posted gtbd

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于线段树相关的知识,希望对你有一定的参考价值。

          关于线段树

给你一个数列A,要支持两个操作:

1.第x个数加v

2.求x到y这个区间的和

不要用树状数组做,用线段树。

线段树比树状数组看起来美观一点,它长这样。

技术分享图片

 

它有两种存储方式:

1.动态存储,使用指针,struct

2.静态存储,直接用数组,下表遵循左儿子乘2,右儿子乘2加1的规则。

特别提醒:用Cena评测的时候,不要使用动态存储,它分两种:

1.提前全new出来,一种是一个new一个,它的写法也分内存池和现new。

构造:

技术分享图片

 

update:

技术分享图片

 

 

 技术分享图片

点修改:

技术分享图片

 

技术分享图片

区间查询:

技术分享图片

 

技术分享图片

区间修改:

date[now]记录的是已经对当前点做过的,但是还没有对当前点的儿子做过的操作。

在每一次修改/查询之前,调用pushdown(now,l,r,mid)函数,下放标记

技术分享图片

 

技术分享图片

模拟一下过程

技术分享图片

区间修改:

关于打标机要注意,明确delta含义,不要忘记pushdown

总结:线段树最重要的两个过程是:pushdown和update

线段树的一个隐藏的重要过程——change和pushdow时都要进行修改。

所有修改函数,最后都要update,所有函数,开始都要pushdown。

关于例题,codevs,洛谷啊什么的都有模板题。

大家可以去做一下。

问一句离骚别愁。

以上是关于关于线段树的主要内容,如果未能解决你的问题,请参考以下文章

关于吉利线段树

关于线段树

关于线段树套伸展树被卡常

线段树

Luogu P3372 模板线段树 1

关于区间异或的线段树