线段树学习笔记
文章目錄
- source:[線段樹 從入門到進階](https://www.cnblogs.com/jason2003/p/9676729.html)(看個思路)
- code:線段樹(單點修改+區間查詢)(區間修改+區間查詢)(這個代碼能用)
- 原理:
- 單點修改 區間查詢
- ~~區間修改 單點查詢~~
- 區間修改 區間查詢
- 懶惰標記:
- 乘法/根號線段樹
source:線段樹 從入門到進階(看個思路)
code:線段樹(單點修改+區間查詢)(區間修改+區間查詢)(這個代碼能用)
1.二叉搜索樹
對于一個線段,我們會用一個二叉樹來表示
2.一顆二叉樹,她的左兒子和右兒子編號分別是她2和她2+1
eg:tree[i].sum=tree[i2].sum+tree[i2+1].sum;就可以建一顆線段樹了!
3.
原理:
1、如果這個區間被完全包括在目標區間里面,直接返回這個區間的值 2、如果這個區間的左兒子和目標區間有交集,那么搜索左兒子 3、如果這個區間的右兒子和目標區間有交集,那么搜索右兒子單點修改 區間查詢
(假如要修改一個點的值,父節點都要改(返回時涉及的點都要改))
區間修改 單點查詢
改一個區間的值:父節點上加標記,查詢的時候再一路加下去
如果這個區間如果這個區間被完全包括在目標區間里面,講這個區間標記k
區間修改 區間查詢
懶惰標記:
如果正好是需要修改的區間的子區間,那么暫時是不用往下改的,只加個懶惰標記就好,當不是的時候,那么就要先把自身的懶惰處理好,再將新的(部分修改的)往子樹上弄
當查詢的時候,如果真包含,那就不用處理直接回,如果不真包含,那就先把懶惰處理好,再往下查
乘法/根號線段樹
eg:
https://blog.csdn.net/icefox_zhx/article/details/78077506
bzoj1218 [HNOI2003]激光炸彈(二維前綴和+暴力/線段樹+離散化+掃描線)
總結
- 上一篇: 蓝桥备赛第一周2021.1.11 递归
- 下一篇: 蓝桥备赛第二周 前缀和