acm应用——Binary Indexed Tree
来源:互联网 发布:js屏蔽鼠标右键 编辑:程序博客网 时间:2024/05/29 17:36
Binary Indexed Tree,也就是二进制索引树,也就是树状数组。用来快速查找和修改一堆数的前缀和。传说中,时间复杂度是lg(n)。
好吧,它就是利用一个数组,每个元素分管一堆特定的连续元素,当然下标是不会超过它的,而且是以它为最终下标。
神奇之处就在于,它是利用二进制的特性进行区域的划分,即每个大于0的下标转成二进制,它的二进制数中的1的最低位就是它所管辖的数的数目。
比如说,4,二进制就是100,它还是管辖4个数。
利用二进制的方法划分区域,会得到几个有趣的性质。
这些性质如下:
比如说,数组中某个元素加a,那么更新管理前缀和数组的元素,就可以先把第一个对应的下标加上a,然后下标不断累加由当前下标转换成的管辖数目,每次得到一个新的下标,都加上一个a,直到遍历到最后的那个元素为止。这样,前缀和数组就可以更新完毕了。
再比如说,要输出某个下标的前缀和,那么就从这个下标开始,不断往前推当前下标所管的数目,并累加这些下标所管控的数字,直到遍历到最前面的那个元素为止。这样,结果就是某个下标的前缀和了。
最后,要得到某个下标管控的数目,用计算机的“与”运算就可以了。
废话完毕。
好吧,它就是利用一个数组,每个元素分管一堆特定的连续元素,当然下标是不会超过它的,而且是以它为最终下标。
神奇之处就在于,它是利用二进制的特性进行区域的划分,即每个大于0的下标转成二进制,它的二进制数中的1的最低位就是它所管辖的数的数目。
比如说,4,二进制就是100,它还是管辖4个数。
利用二进制的方法划分区域,会得到几个有趣的性质。
这些性质如下:
比如说,数组中某个元素加a,那么更新管理前缀和数组的元素,就可以先把第一个对应的下标加上a,然后下标不断累加由当前下标转换成的管辖数目,每次得到一个新的下标,都加上一个a,直到遍历到最后的那个元素为止。这样,前缀和数组就可以更新完毕了。
再比如说,要输出某个下标的前缀和,那么就从这个下标开始,不断往前推当前下标所管的数目,并累加这些下标所管控的数字,直到遍历到最前面的那个元素为止。这样,结果就是某个下标的前缀和了。
最后,要得到某个下标管控的数目,用计算机的“与”运算就可以了。
废话完毕。
0 0
- acm应用——Binary Indexed Tree
- Binary Indexed Tree
- Binary Indexed Tree
- Binary Indexed Tree Template
- Binary Indexed Tree
- Basic Binary Indexed Tree
- binary indexed tree
- Binary Indexed Tree
- 树状数组(Binary Indexed Tree)
- 树状数组(Binary Indexed Tree)
- 树状数组(Binary Indexed Tree)
- Binary indexed tree(树状数组)
- Binary Indexed Tree 2D
- 【算法笔记】Binary Indexed Tree
- 树状数组(Binary Indexed Tree)
- 树状数组 Binary Indexed Tree
- Hdu 5921 Binary Indexed Tree
- 树状数组(binary indexed tree)
- BZOJ 2705 Longge的问题
- 基本排序之冒泡排序
- contiki的rime协议分析-abc
- 关于--enable-assembler,--enable-static,--enable-shared编译项的研究
- BZOJ 2190 仪仗队
- acm应用——Binary Indexed Tree
- Android getDimensionPixelSize, 代码中设置字体大小,读xml配置。
- kaldi中深度学习的主要实现---------Karel's DNN training implementation
- vs 2008 判断某年某月有多少天
- 华为2014暑期实习生招聘机试第二题
- ZOJ-2347
- BZOJ 1878 HH的项链
- CC_3_栈与队列
- codeforces 402 B Online Meeting