树状数组基础应用

树状数组是一种数据结构,可以高效地实现区间和查询与单点更新操作,时间复杂度为O(logn)。文章介绍了lowbit函数、前缀和的概念,并详细解释了树状数组的工作原理和构造方式。通过示例题目展示了树状数组的使用方法,包括如何进行区间查询和单点更新。
摘要由CSDN通过智能技术生成

树状数组

前置知识

  • lowbit函数

    lowbit(x) = x & (-x)

    Q:这么简单的一个运算作用是什么呢?

    A:首先我们知道任何一个正整数都有其二进制表示,负整数的二进制表示为:该数绝对值的二进制表示的反码+1。

    例如,对于一个数-7,我们知道其绝对值的二进制表示为0111,那么我们就可以知道-7的二进制表示为1000+1=1001,那么此时7&(-7)的结结果就是0001。

    同理我们可以通过任意给定的x得到其x&(-x)的值。这里我们展示1-8之间的lowbit计算结果。

    数值x x对应二进制表示 -x对应二进制表示 x&(-x)
    1 0001 1111 0001
    2 0010 1110 0010
    3 0011 1101 0001
    4 0100 1100 0100
    5 0101 1011 0001
    6 0110 1010 0010
    7 0111 1001 0001
    8 1000 1000 1000

    通过上表我们可以发现,x&(-x)的二进制表示中永远只存在一个1位,当然这个性质是由其运算规则得到的统一性质,对全体实数有效。且我们容易发现1所在的位置就是x的二进制表示中最末位的1的位置。

    也就是说,如果x的二进制表示第一次出现1的位置为k位,那么lowbit(x)= 2 k 2^k 2k

  • 前缀和
    Q:前缀和是如何定义的?

    A:不妨定义原数组为a,存在一个数组s,如果s与a之间满足如下关系,我们就称数组s为数组a的前缀和数组。

    如果输入索引从0开始,那么

    ∀ x ∈   t h e   r a n g e   o f   i n p u t , a r e   r e l a t e d   t o : s [ x + 1 ] = s [ x ] + a [ x ] \forall x\in \ the \ range \ of \ input,are\ related\ to:s[x + 1] = s[x] + a[x] x the range of inputare related to:<

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值