这里写一下昨天写的bug,出现问题了,找了很久也不知道哪里出问题了,最后学姐帮我找到了,十分感激
区间求和查询操作
ll query(ll k,ll l,ll r)
{
if(tree[k].l==l&&tree[k].r==r)
{
return tree[k].sum;
}
ll mid=tree[k].l+tree[k].r>>1;
if(mid>=r)
{
return query(k<<1,l,r);//这里注意,不能写:l,mid
}
else if(mid<l)
{
return query(k<<1|1,l,r);//这里不能写mid+1,r
}
else
{
return query(k<<1,l,mid)+query(k<<1|1,mid+1,r);
}
}
为什么以上操作不能写:
因为如果要查找的只在左区间或者右区间,这样的话区间就被分割了