我可以使用条件在BIT中执行范围更新。假设我有一系列负频率和正频率A [] = {1,-3,-4,5,9}。我希望使用条件更新数组的值:如果更新值(x)为负数,则仅更新负数元素,如果更新值为正数,则仅更新范围内的正值。
例如,在上面的数组中,如果更新查询是2 4 -2(左右值),则只更新第2(-3)和第3(-4)位置。保留第4(5)位,因为它是一个正整数。
或者我应该使用其他数据结构来完成此任务?
我使用this来学习范围更新。
答案 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]);
}