带有条件的BIT中的范围更新

时间:2015-07-11 12:39:58

标签: segment-tree fenwick-tree

我可以使用条件在BIT中执行范围更新。假设我有一系列负频率和正频率A [] = {1,-3,-4,5,9}。我希望使用条件更新数组的值:如果更新值(x)为负数,则仅更新负数元素,如果更新值为正数,则仅更新范围内的正值。

例如,在上面的数组中,如果更新查询是2 4 -2(左右值),则只更新第2(-3)和第3(-4)位置。保留第4(5)位,因为它是一个正整数。

或者我应该使用其他数据结构来完成此任务?

我使用this来学习范围更新。

1 个答案:

答案 0 :(得分:0)

是的,有可能。 这是更新函数的代码,如果newval小于任何条目,它会将段[i,j]中的值更改为“newval”。

void update_tree(long long node,long long a,long long b,long long i,long long j,long long newval)
{
    if(a>b||a>j||b<i)
       return;

    if(a==b)
    {
        if(newval<tree[node])
        {
           tree[node]=newval;
        }
        return;
}
    update_tree(2*node,a,(a+b)/2,i,j,newval);
    update_tree(2*node+1,(a+b)/2+1,b,i,j,newval);
    tree[node]=min(tree[2*node],tree[2*node+1]);
}