首页 > 编程语言 > 详细

树状数组学习笔记

时间:2019-03-16 18:44:54      阅读:139      评论:0      收藏:0      [点我收藏+]

树状数组(Binary Indexed Trees)其代码简洁,第一次遇见就被惊艳到了。

网上讲解也有很多,我就简单总结一下。

树状数组有如下几个基本操作。

首先要了解lowbit运算,二进制分解下最小的2的次幂。

#define lowbit(x) (x&(-x))

1.查询前缀和

int ask(int x)
{
    int res = 0;
    for (; x; x -= lowbit(x))
        res += b[x];
    return res;
}

2.单点增加

void add(int x, int v)
{
    for (; x <= n; x += lowbit(x))
        b[x] += v;
}

树状数组的初始化:

技术分享图片

void init(){//线性构造
    for (int i = 1; i <= n; i++){
        pre[i] = pre[i - 1] + a[i];
        c[i] = pre[i] - pre[i - lowbit(i)];
    }
}

 

树状数组学习笔记

原文:https://www.cnblogs.com/xiaoguapi/p/10543631.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!