-
例题和代码模板:https://www.cnblogs.com/pavtlly/p/9979702.html 看老师这个博客链接吧
https://zhuanlan.zhihu.com/p/106118909 线段树资料
线段树进阶资料(有兴趣可以看看这个进阶的内容):
https://www.cnblogs.com/AC-King/p/7789013.html
作业和练习:
https://www.luogu.com.cn/problem/P1531
https://www.luogu.com.cn/problem/P2357
-
线段树可以保存并维护许多区间的特性,如最大值、最小值(如在线RMQ)、存在值(如配合扫描线实现矩形覆盖面积计算)等,而树状数组只能用于区间求和。
从效率来说
如果只用于求和
线段树和树状数组时间复杂度都是O(logn)
空间复杂度为O(n),但需要注意的是,线段树的空间复杂度在常数上为树状数组的两倍。
所以建议,如果只用于区间求和,写树状数组,代码短且少占空间。如果需要实现各种功能,如在线RMQ,选择线段树。
-
树状数组单点更新 区间求值
模板题1:https://www.luogu.com.cn/problem/P3374 (老师代码参考)
https://www.luogu.com.cn/problem/P2068 (类似的,可以自己练一练)
树状数组单点求值 区间更新
模板题2:https://www.luogu.com.cn/problem/P3368
(树状数组差分处理,可以自己思考一下)
树状数组区间求最大值/最小值
https://www.luogu.com.cn/problem/P2880 (老师代码参考)