我在 这道题 维护前缀 gcd 时用了下面的代码
void Add(int x,int w){
for(;x<=n;x+=lowbit(x))Gcd[x]=gcd(Gcd[x],w);
}
int Qry(int x){
int ans=0;
for(;x;x^=lowbit(x))ans=gcd(ans,Gcd[x]);
return ans;
}
void Mdf(int x,int w){
Add(x,w);
a[x]=w;
}
int main(){
for(re int i=1;i<=n;++i)Add(i,a[i]);
}
之前 AC 后就没管了
不过刚刚重新看了下这份代码,感觉会有问题,但是跟题解也没有拍出 hack
请问这份树状数组维护前缀 gcd 写法是正确的吗(或者有修改操作时树状数组能维护前缀 gcd 吗)