树状数组和线段树
区别:
转载:https://www.cnblogs.com/wpbing/archive/2018/07/26/9370304.html
实现:
树状数组:
转载:https://zhuanlan.zhihu.com/p/77182242
线段树:
转载:https://leetcode-cn.com/problems/range-sum-query-mutable/
个人理解:
线段树和堆排序的那个有点像
树状数组和2048游戏一样
树状数组两部分:
更新:
void add(int i, int value){ while(i <= N){ c[i] += value; i += lowbit(i); } }
一步一步把lowbit的1给加没了
计算和:
int sum(int i){ int sum = 0; while(i > 0){ sum += c[i]; i -= lowbit(i); } return sum; }
一步一步把lowbit的1给减没了