是人都能看懂的树状数组介绍(看不懂举报我)

树状数组是个好东东,我们一定要学会。

单点修改需O(n),树状数组只需O(log_n)

区间查询需O(n),树状数组只需O(log_n)

区间修改与查询,用它!用它!用它!!!

树状数组基本概念

树状数组的核心思想有关于二进制,不算特别难,而且代码贼短,适合作者这种小菜。

树状数组就是让需要改变的那个区间的第一个数加上改变的大小;让区间最后一个数的后一个数减去要改变的大小(类似差分)。第一个数加完后,使包含它的数也加上改变的大小;最后一个数的后一个数减完后,使包含它的数也减上改变的大小

好,讲完这么多,你们肯定不理解,接下来我来解释(说了一堆废话

树状数组单点修改

进入正题。

区间修改我们普通修改是不是需要O(n),但是我们用树状数组只需要O(log_n),是不是很优呢?

当我们修改第一个数的时候,让他增加一个数n(我们假定n为2)。但在个时候,有一些本来包含这个数的大数就不服了:“我们包含他,他咋还比我们大了呢?”,所以说这个时候,为了平复民情啊,我们还需要把包含这个数的大数也加上2,附上一张图:

看,比如说我们要更改的是3的话,那包含他的数是不是有:4,8,16。所以说我们需要让这些数也加上2

这时候就会有同学问了:“怎么找到包含他的数呢?”

诶,问得好!

我也不知道。

啊开个玩笑,我怎么可能不知道呢?

前面我们说了树

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值