zoukankan      html  css  js  c++  java
  • 树状数组总结

    这次复习树状数组主要加深了对于原理的理解。

    树状数组是什么?

    树状数组由3个部分组成:

    1.lowbit()//求lowbit值   lowbit(x)=x&(-x)//这个比较方便,记住就好。

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

    2.update()//修改

    void update(int p,int w){
        while(p<=n){
            c[p]+=w;
            p+=lowbit(p);
        }
    }

    3.sum()//求和

    long long int sum(int p){
        long long int tot=0;
        while(p){
            tot+=c[p];
            p-=lowbit(p);
        }
        return tot;
    }

    树状数组能干什么?

    1.(一维和二维)单点修改,区间查询

    2.(一维和二维)区间修改,单点查询

    3.(一维和二维)区间修改,区间查询

    4.(一维和二维)区间修改,区间查询

    树状数组中数组C[X]的含义是什么?

    C【X】表示的是[X-lowbit(x),X]的区间和。

    update更新的是什么?

    如果在x位加上w,每次更新c[x+lowbit(x)],其实就是从更新[1,x+lowbit(x)],所以求和的时候不会重复加上w.

    单点修改怎么办?

    单点修改只需要弄一个差分数组就行了。

    二维树状数组:

    每次操作的时间复杂度是((log(n))^2)。

    (区间修改,区间查询)(区间修改,区间查询)

    为什么要用差分,因为区间修改如果不用差分得每个每个修改,时间复杂度过不去。

  • 相关阅读:
    一个tomcat 增加多个端口
    转项目经理
    apicloud 解析
    七行代码搞定 任意数据库中的数据迁移
    语语
    农家设计图纸
    日期再总结
    X删除数据表的新用法
    c#中各类日期的计算方法,收藏
    IIS 7.5 高并发参数配置
  • 原文地址:https://www.cnblogs.com/sky-zxz/p/9636976.html
Copyright © 2011-2022 走看看