目录
1.树状数组的引入
树状数组是用来解决区间修改-单点查询以及单点修改-区间查询和区间修改-区间查询问题的一种优化时间的算法。
简单来说,如果一个问题能转变成上述三个问题,就可以使用树状数组,将修改和查询操作的时间复杂度从O(n)优化到O(log n),树状数组是一种简单的数据结构。
2.基本操作:主要包括 插入操作,查询操作.
3.具体实现:
这里以区间求和问题作为例子。
也就是区间修改,区间求和
插入操作:
void add(int tr[],int x,int c){
for(int i=x;i<=n;i+=lowbit(i)) tr[i]+=c;
}
查询操作:
int sum(int tr[],int x){
int res=0;
for(int i=x;i;i-=lowbit(i)) res+=tr[i];
return res;
}
例题:1.楼兰图腾
如何把一个问题转换成区间修改,区间查询,是解决树状数组问题的关键,另外能用树状数组解决的问题也可以用线段树解决。