树状数组
the_conquer_zzy
计算机科学与技术专业
展开
-
hdu 1156
主题思路树状数组:对线段按x坐标进行排序,从小到大依次遍历,最初开始时把所有点都加入到r边的树状数组中。随着遍历,删去已经遍历过的x坐标的点,并把这些点加入到左边的树状数组中。 需要对树状数组进行统计,以及进行更改。这也是为什么用树状数组。参考博客:http://www.cnblogs.com/Stomach-ache/p/3871751.htmlAC 代码#include <iostream>原创 2017-08-10 18:41:58 · 207 阅读 · 0 评论 -
hdu 1166
经典RMQ问题 解决方案: 树状数组,或者线段树 只要是能用树状数组解决的,肯定都能用线段树解决。 这里先写用树状数组解决的,然后再写用线段树的。树状数组代码: 核心代码就是lowbit,以及常用的求和和更新操作。int lowbit(int x){ return x&(-x);}int sum(int n){ int ans=0; while(n!=0){原创 2017-08-14 21:00:56 · 145 阅读 · 0 评论 -
转载notonlysuccess的线段树博客
介绍: 线段树和树状数组,都可以用来解决RMQ问题,树状数组实现起来较简单,简洁。但是能用树状数组解决的问题都可以用线段树做,而线段树能解决的问题,树状数组却未必能做。 http://blog.csdn.net/weizhuwyzc000/article/details/50407450原创 2017-09-21 14:19:57 · 243 阅读 · 0 评论 -
hdu 1394 最小逆序数
主题思想: 用线段树,或者树状数组求出给出序列的逆序数,利用线段树求逆序数的思路是: 线段0-n-1 表示给出的序列。 依次读入序列的值 ai ,查询线段树i之后已经读入的值,因为是按顺序读入序列的,如果读入ai查询,i之后的线段的值,如果不为0,表示在i之前没有比ai大的数,否则,则证明,读入ai时,在i之前,已经有比ai大的数,这些数与ai构成逆序对。 然后再更新线段树i节点 为1 表示已经原创 2017-09-21 17:46:32 · 187 阅读 · 0 评论 -
树状数组 Binary Indexed Tree
今天学习下一种新的数据结构。 树状数组 英文名字Binary Indexed Tree. 树状数组是为了方便对需要修改的区间进行求和的数据结构。 如果一个数组,需要对其求和,并且当数组元素修改后仍需要对其求和,对这种需要修改,并且修改后需要求和的问题,可以采用树状数组。树状数组采用空间换时间的方式,当需要求和操作时,树状数组并不需要遍历整个数组的操作,而是只需要计算少数几个节点的和,就可以得原创 2017-08-10 16:48:54 · 240 阅读 · 0 评论 -
树状数组系列
树状数组 binary indexed tree的应用:适合解决单点更新,区间求和,更新情况少的场景。 求和时间复杂度logn如果是更新则需要n树状数组为了方便,数组下标从1开始。对于已知数组a[i] ,重新构建一个c[i]. 其中c[i]=a[i-2^k+1]+…+a[i];其中k是一个数的二进制表示中从右边数遇到1之前0的个数比如对于数字4(100) k=2.2^k可以用O(1)求出...原创 2018-10-15 10:56:50 · 83 阅读 · 0 评论