zoukankan      html  css  js  c++  java
  • 基础

    推荐博客 :https://blog.csdn.net/wconvey/article/details/7827188

    在第二遍看了树状数组后, 感觉有了更深的认识,既然是树状数组,从名字来看,就是像树的一个数组,没错,就是一个普通的数组,我们把他假定成为一棵树。

    用 C1 表示 A1 的和

    用 C2 表示 A1 A2 的和

    用C3 表示 A3 的和

    用C4表示 A1 A2 A3 A4 的和

    ...

    在这里面 镶嵌着一个很神奇的二进制 关系

    在举个小例子 : 4 是等于 1 +3的和,其中1是3的最低位的二进制所在的位置。

    那么现在要怎么去提取3的最低位的一个1呢 ?

    3 的二进制码是 011

    -3 的二进制码是 101 (取反加 1 )

    3 & (- 3 ) = 1

    int lowbit(int x){
        return x&(-x);
    }
    

    对于单点更新,区间更新

    void add(int x){
        for(int i = x; i <= n; i += lowbit(i)){
            c[i] += x;        
        }
    }
    
    int getsum(int a, int b){
        int sum = 0;
        for(int i = b; i > 0; i -= lowbit(i)){
            sum += c[i];
        } 
        return sum;
    }
    
    东北日出西边雨 道是无情却有情
  • 相关阅读:
    使用ab进行页面的压力测试
    apache http server2.2 + tomcat5.5 性能调优
    php Try Catch多层级异常测试
    用flask实现的添加后保留原url搜索条件
    会议室预定设计
    day4
    day3
    day2
    day1
    redis介绍以及安装
  • 原文地址:https://www.cnblogs.com/ccut-ry/p/8308913.html
Copyright © 2011-2022 走看看