标签:程序 info str 一个 查找 应用 数据结构 load mic
线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点
使用线段树可以快速的查找某一个节点在若干条线段中出现的次数,时间复杂度为O(logN)
而未优化的空间复杂度为2N,实际应用时一般还要开4N的数组以免越界,因此有时需要离散化让空间压缩
所以,线段树就是长得这个亚子(度娘的图):
那至于为什么要开4倍空间呢?
我也不大清楚,可以写个程序看一下,发现2倍,3倍空间都会越界
只要记得开4倍就好了qwq
二叉树的特性:每个标号为i的父节点,他的左儿子编号是i2,右儿子编号是i2+1
所以便可以写出求左儿子和右儿子的函数啦qwq:
int n,ans[N<<2];
inline int ls(int i){return i<<1;}//左儿子
inline int rs(int i){return i<<1|1;}//右儿子
上面函数里写的是二进制运算,i<<1就相当于i2
至于i<<1|1,因为当前已经乘2,二进制末尾必然是0(不了解可以bfs qwq),而|1就相当于+1
所以i<<1|1等同于i2+1
标签:程序 info str 一个 查找 应用 数据结构 load mic
原文地址:https://www.cnblogs.com/RadestionAdtinium/p/13170710.html