题目链接
http://noi-test.zzstep.com/contest/0x40%E3%80%8C%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E8%BF%9B%E9%98%B6%E3%80%8D%E4%BE%8B%E9%A2%98/4302%20Interval%20GCD
分析
根据更相损减术,区间 [ l , r ] [l, r] [l,r] 的最大公约数等于 l l l 和差分序列区间 [ l + 1 , r ] [l + 1, r] [l+1,r] 的最大公约数。
这样使用支持单点修改,区间查询的线段树即可。
AC代码
#include <cstdio>
#include <cstdlib>
#include <cmath>
using namespace std;
typedef long long ll;
inline ll read() {
ll num = 0, flag = 1;
char c = getchar();
while (c < '0' || c > '9') {
if (c == '-') flag = -1;
c = getchar();
}
while (c >= '0' && c <= '9')
num = num * 10 + c - '0', c