#include<bits/stdc++.h>
using namespace std;
#define int long long
struct Node
{
int l,r,v,d;
}tree[2000005];
int num[500005],cf[500005];
void pushup(Node &u,Node &l,Node &r)
{
u.v=l.v+r.v;
u.d=__gcd(l.d, r.d);
}
void pushup(int u)
{
pushup(tree[u],tree[u<<1],tree[u<<1|1]);
}
void build(int u,int l,int r)
{
if(l==r)tree[u]={l,r,cf[l],cf[l]};
else
{
tree[u]={l,r};
int mid=l+r>>1;
build(u<<1,l,mid);
build(u<<1|1,mid+1,r);
pushup(u);
}
}
int query(int u,int l,int r)
{
if(tree[u].l>=l&&tree[u].r<=r)
{
return tree[u].d;
}
else
{
int mid=tree[u].l+tree[u].r>>1;
if(r<=mid)
{
return query(u<<1,l,r);
}
else if(l>mid)
{
return query(u<<1|1,l,r);
}
else
{
return __gcd(query(u<<1,l,r),query(u<<1|1,l,r));
}
}
}
int query2(int u,int l,int r)
{
if(tree[u].l>=l&&tree[u].r<=r)
{
return tree[u].v;
}
else
{
int mid=tree[u].l+tree[u].r>>1;
if(r<=mid)
{
return query2(u<<1,l,r);
}
else if(l>mid)
{
return query2(u<<1|1,l,r);
}
else
{
return query2(u<<1,l,r)+query2(u<<1|1,l,r);
}
}
}
void change(int u,int p,int v)
{
if(tree[u].l==tree[u].r&&tree[u].l==p)
{
tree[u].d+=v,tree[u].v+=v;
}
else
{
int mid=tree[u].l+tree[u].r>>1;
if(p<=mid)
{
change(u<<1,p,v);
}
else
{
change(u<<1|1,p,v);
}
pushup(u);
}
}
signed main()
{
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++)
{
cin>>num[i];
cf[i]=num[i]-num[i-1];
}
build(1,1,n);
char flag;
int x=0,y=0,z=0;
while(m--)
{
cin>>flag>>x>>y;
if(flag=='C')
{
cin>>z;
change(1,x,z);
if(y+1<=n)
{
change(1,y+1,-z);
}
}
else
{
int t=query2(1,1,x);
cout<<abs(__gcd(t,query(1,x+1,y)))<<"\n";
}
}
return 0;
}
RT
这段代码哪里RE了
n≤5×105
m≤105
ai,x≤109
1≤l≤r≤n