如题目>▽<
线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。
使用线段树可以快速的查找某一个节点在若干条线段中出现的次数,时间复杂度为O(logN)。而未优化的空间复杂度为2N,实际应用时一般还要开4N的数组以免越界,因此有时需要离散化让空间压缩。
建树前准备
1 |
|
线段树的建立
1 | inline void push_up(ll p) { // 向上更新节点的值 |
线段树的区间修改
1 | inline void f(ll p, ll l, ll r, ll k) { |
线段树的区间查询
1 | inline ll query(ll x, ll y, ll l, ll r, ll p) { |
好用的一键打包式线段树
1 | // 这两个宏不能忘了 |