树状数组总结

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

 

树状数组是什么?

树状数组由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)。

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

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

转载于:https://www.cnblogs.com/sky-zxz/p/9636976.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值