树状数组和线段树

区别:

转载: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给减没了

原文地址:https://www.cnblogs.com/da-peng/p/12770557.html