【CH4302】Interval GCD

思路:线段树维护a的差分数组的gcd,

因为$gcd(a_1,a_2,a_3,...,a_n)=gcd(a_1,a_2-a_1,a_3-a_2,...,a_n-a_{n-1})$

原区间修改可以转化为差分数组上的两次单点修改。

因为实际计算时还需要原数,所以用树状数组维护b的增减量。

询问时,用这条语句即可:

printf("%lld\n",abs(gcd(a[L]+szszfuc::ask(L)/*左端的原数*/,segfuc::ask(1,L+1,R))/*其它差分的gcd*/));

 

注意:长时间测试不对,可以重写代码。

           PS:n,m不可混,要时刻看题。

 

posted @ 2019-03-05 13:34  蒟蒻魔芋汤  阅读(244)  评论(0编辑  收藏  举报