1、二分数组
//采用了线段树中二分数组结构
//区间[b,e]求和
long long query(int k, int beg,int end, int b, int e){
if(b>end || e<beg) return 0;
if(b<=beg && e>=end)
return tree[k];
int mid = (beg+end)/2;
return query(2*k,beg, mid, b, e) + query(2*k+1, mid+1, end, b, e);
}2、树状结构
int Lowbit(int k)
{
return k&(-k);
}
int getSum(int k)
{
long long s = 0;
while(k > 0)
{
s += tree[k];
k -= Lowbit(k);
}
return s;
}
//a表示当前值,b表示更新后的值
void update(int k, int a, int b)
{
while(k <= n)
{
tree[k] = tree[k] - a + b;
k = k + Lowbit(k);
}
}
二分数组与树状结构算法详解
本文深入探讨了二分数组结构及其在区间求和中的应用,并详细介绍了树状数组(线段树)的基本原理与操作方法,包括如何进行区间求和与单点更新。通过具体代码实现,展示了算法的高效性和实用性。
1975

被折叠的 条评论
为什么被折叠?



