这个map我也是醉了。
这个 主要是 那个 不同gcd值得区间数预处理难弄。
a[1...i]=a[1...i-1]+a[i...i]; 当前区间:不同的gcd值相对应的区间数=之前区间:不同的gcd值相对应的区间数+gcd(num[i],之前区间的某个gcd);
#include"iostream"
#include"vector"
#include"set"
#include"queue"
#include"algorithm"
#include"map"
#include"cstdio"
#include"cstring"
#include"string"
#define sf scanf
#define pf printf
#define INF 100000000000000
#define eps 1e-6
#define FP freopen("a.txt","r",stdin);
using namespace std;
typedef long long ll;
const int maxn=100010;
int a[maxn*4];
int b[maxn];
map<int,ll>ans,m1,m2;
int gcd(int a,int b)
{
return b==0?a:gcd(b,a%b);
}
void up(int rt)
{
a[rt]=gcd(a[rt<<1],a[rt<<1|1]);
}
void build(int L,int R,int rt)
{
if(L==R)
{
a[rt]=b[L];
return ;
}
int Mid((L+R)/2);
build(L,Mid,rt<<1);
build(Mid+1,R,rt<<1|