线段树

实现数组的求和与修改操作

设想对于数组而言,每次计算一个区间的和意味着要遍历一次区间,如果使用前缀和则在修改上需要遍历一次区间

设想每两个合一,将数组变为原来一半的长度,就减少了一半的时间,再减少一半,一直到合并出最大的数值,这样每次修改只需要改该值参与的那部分计算,求和则可以按照区间选择合适的合并值相加

这大概就是线段树

树形数组

在线段树的基础上,发现存在一些数不起作用 例如5,在前三个数字和时不会用到,在计算前四个时也用不上,将冗余的数去掉,发现剩下的数与原来的数组长度一致,称为树状数组