我可以在有条件的 BIT 中执行范围更新吗?假设我有一组负频率和正频率 A[] = {1, -3, -4, 5, 9}。而且我想用一个条件来更新数组的值:如果更新值(x)为负,则仅更新负元素,如果更新值为正,则仅更新范围内的正值。
例如,在上述数组中,如果更新查询为 2 4 -2,(左右值),则只更新第 2(-3)和第 3(-4)位置。离开第 4(5) 个位置,因为它是一个正整数。
或者我应该使用另一个数据结构来完成这个?
我用它来学习范围更新。
我可以在有条件的 BIT 中执行范围更新吗?假设我有一组负频率和正频率 A[] = {1, -3, -4, 5, 9}。而且我想用一个条件来更新数组的值:如果更新值(x)为负,则仅更新负元素,如果更新值为正,则仅更新范围内的正值。
例如,在上述数组中,如果更新查询为 2 4 -2,(左右值),则只更新第 2(-3)和第 3(-4)位置。离开第 4(5) 个位置,因为它是一个正整数。
或者我应该使用另一个数据结构来完成这个?
我用它来学习范围更新。
对的,这是可能的。这是更新函数的代码,如果 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]);
}