0

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

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

或者我应该使用另一个数据结构来完成这个?

我用来学习范围更新。

4

1 回答 1

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]);
}
于 2015-07-18T10:23:45.637 回答