码迷,mamicode.com
首页 > 编程语言 > 详细

树状数组

时间:2020-07-11 11:14:57      阅读:81      评论:0      收藏:0      [点我收藏+]

标签:简单   修改   线段树   res   操作   color   get   比较   二进制   

树状数组能做的线段树都可以,但是有的时候为了代码简单,能写树状数组就不写线段树。

树状数组是一种类似线段树的数据结构,只不过树状数组上的操作比较简单,最简单的就是单点修改和区间查询

树状数组是按照数的二进制形式进行存储数据,s[1]存储的是a[1] ,s[2]存储的是a[1]+a[2] ,s[3]存储的是a[3],s[4]存储的是a[1]+a[2]+a[3]+a[4]依次类推

code:

int lowbit(int x){
    return x & -x;
}
void add(int x,int v){
    for(int i=x;i<=n;i+=lowbit(i)){
        s[i]+=v;
    }
}

int get(int x){
    int res=0;
    for(int i=x;i;i-=lowbit(i)){
        res+=s[i];
    }
    return res;
}

相比较线段树来说,树状数组的板子看起来好简单,以后还是多使用这个吧

树状数组

标签:简单   修改   线段树   res   操作   color   get   比较   二进制   

原文地址:https://www.cnblogs.com/kstranger/p/13282823.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!