Lemma:(gcd(a_1,a_2,cdots,a_n)=gcd(a_1,a_2-a_1,a_3-a_2,cdots,a_n-a_{n-1}))。证明显然。
然后就可以用线段树维护数组 (a_i) 的差分数组,维护区间 (gcd),根据 Lemma,令 (g=gcd(a_{l+1}-a_l,a_{l+2}-a_{l-1},cdots,a_r-a_{r-1})),则每次查询的答案就是 (gcd(g,a_l))。其中 (a_l) 可以用一个树状数组单独维护。
对于修改操作,就是差分数组常规操作,单点修改就行。
然后这道题就做完了。