acm应用——Binary Indexed Tree

来源:互联网 发布:js屏蔽鼠标右键 编辑:程序博客网 时间:2024/05/29 17:36
Binary Indexed Tree,也就是二进制索引树,也就是树状数组。用来快速查找和修改一堆数的前缀和。传说中,时间复杂度是lg(n)。

好吧,它就是利用一个数组,每个元素分管一堆特定的连续元素,当然下标是不会超过它的,而且是以它为最终下标。

神奇之处就在于,它是利用二进制的特性进行区域的划分,即每个大于0的下标转成二进制,它的二进制数中的1的最低位就是它所管辖的数的数目。
比如说,4,二进制就是100,它还是管辖4个数。

利用二进制的方法划分区域,会得到几个有趣的性质。

这些性质如下:


比如说,数组中某个元素加a,那么更新管理前缀和数组的元素,就可以先把第一个对应的下标加上a,然后下标不断累加由当前下标转换成的管辖数目,每次得到一个新的下标,都加上一个a,直到遍历到最后的那个元素为止。这样,前缀和数组就可以更新完毕了。



再比如说,要输出某个下标的前缀和,那么就从这个下标开始,不断往前推当前下标所管的数目,并累加这些下标所管控的数字,直到遍历到最前面的那个元素为止。这样,结果就是某个下标的前缀和了。

最后,要得到某个下标管控的数目,用计算机的“与”运算就可以了。


废话完毕。
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 遇到素质低的人怎么办 孩子上课注意力不集中怎么办 素质报告册丢了怎么办 潞城镇剩下5个村怎么办 高三复读生学籍怎么办 被检精子总数少怎么办 前向运动精子17%怎么办 精子形态正常率1怎么办 精子形态正常率2怎么办 精子头部畸形率高怎么办 椎底动脉供血不足怎么办 颈椎动脉供血不足怎么办 颈椎病引起头晕脑供血不足怎么办 淘宝店被释放了怎么办 被枣蝎子蛰了怎么办 六角螺丝拧花了怎么办 苹果螺丝滑丝了怎么办 六角螺帽拧花了怎么办 六角螺母拧花了怎么办 内六角螺丝滑丝怎么办 十字螺丝拧花了怎么办 梅花螺丝滑丝了怎么办 螺丝孔道滑丝了,怎么办 锅把铆钉松啦怎么办 膨胀螺丝孔大了怎么办 戒指不圆了怎么办妙招 眼镜框的腿断了怎么办 弹簧腿眼镜坏了怎么办 vps搭建ss被墙怎么办 注塑机螺杆黏料怎么办 分解师耐久度0了怎么办 有鼻涕擤不出来怎么办 擤鼻涕耳朵堵了怎么办 脸用什么都过敏怎么办 1岁宝宝流清鼻涕怎么办 2岁宝宝流清鼻涕怎么办 3岁儿童流清鼻涕怎么办 鼻子老是流清水鼻涕怎么办 5岁儿童感冒鼻塞怎么办 3岁宝宝感冒鼻塞怎么办 宝宝9个月流鼻涕怎么办