题意:维护支持以下两种操作的序列:1 l r询问a[l...r]的gcd,2 l r x把a[l...r]全部+x 题解:一道经典题.根据gcd(a,b)=gcd(a-b,b)以及区间加可知,这题可以差分求解.然后只需要维护支持单点加减和区间查询gcd.差分和的线段树即可,复杂度O(nlog2n),因为要求区间gcd. #include<bits/stdc++.h> #define lson l,mid,rt<<1 #define rson mid+1,r,rt<<1|…
NOI2012魔幻棋盘弱化版 gcd(a,b,c,d,e)=gcd(a,b-a,c-b,d-c,e-d) 然后就可以把区间修改变成差分后的点修了. 用BIT维护原序列,线段树维护区间gcd,支持点修区查 #include<iostream> #include<cstring> #include<cstdlib> #include<cstdio> #define ll long long using namespace std; ; ]; int n,m,ty…