线段树总结(一) 入门篇

今天写写总结,线段树作为一个常考常新,每次看到了都会有:"还有这种操作?"的谜之数据结构,我们要记住,线段树是序列元素个数确定的(某些特殊的题是可以离线支持删除操作),操作支持区间的封闭性,翻转操作只支持01序列的翻转,整数序列的翻转是不支持的。本篇博客主要介绍线段树的基本操作,也就是那些典型的线段树题目,由于博主较懒,而且大部分题目都是博主之前写过的博客,这里博主就直接粘博客链接了。

简单的端点更新

http://blog.csdn.net/eod_realize/article/details/38539281

http://blog.csdn.net/eod_realize/article/details/38541133

http://blog.csdn.net/eod_realize/article/details/38538365

http://blog.csdn.net/eod_realize/article/details/38519341

注意线段树的空间大小一般开到n(元素个数)*4 为了缩减代码可以去自定义宏 递归时的l,r都是闭区间

端点更新的特殊用处:加速模拟约瑟夫问题(要求输出每次死掉的是几号) 询问某个点的逆序对

约瑟夫环 http://blog.csdn.net/eod_realize/article/details/40858035


区间更新:

这里就要讲一下lazy标记了。lazy标记打到某一层时,这一层要完成相关的操作。也就是说lazy标记记录的是这一层未向下一层传递的信息,与本层中药维护的信息无关。由于一个区间最多被分为logn段,所以lazy标记的复杂度是logn。在访问或更新之前要把lazy里的信息清空,并传递下去(pushdown). 每段更新完后要由子区间更新当前区间(pushup) 有时线段树的题难就难在pushdown 和pushup 函数。有时这两个函数要进行大量的讨论,有时和序列长度有关。

简单的区间更新:

http://blog.csdn.net/eod_realize/article/details/37833937

http://blog.csdn.net/eod_realize/article/details/37886455

http://blog.csdn.net/eod_realize/article/details/38543049

http://blog.csdn.net/eod_realize/article/details/38544607

http://blog.csdn.net/eod_realize/article/details/39803911

http://blog.csdn.net/eod_realize/article/details/38559095

通过上面的题,对线段树应该有个大体的了解了,假如基本操作还觉得不熟悉的话可以去看not_only_success的博客。博主也是按照他的博客学习的基本操作。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值