RT,样例没过
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define kg putchar(' ')
#define endl puts("")
inline int read(){
int vis=1,ans=0;
char x=getchar();
while(x<'0'||x>'9'){
if(x=='-')vis=-1;
x=getchar();
}
while(x>='0'&&x<='9'){
ans=ans*10+x-'0';
x=getchar();
}
return vis*ans;
}
inline void print(int x){
if(x<0)putchar('-'),x=-x;
if(x>9)print(x/10);
putchar(x%10+'0');
}
const int N=5e5+9;
int T=read(),n,opt,l,r;
int x[N];
int gcd(int x,int y){
if(x%y==0)return y;
else return gcd(y,x%y);
}
struct node{
int l,r,Gcd;
}e[4*N];
inline void pushup(int p){
e[p].Gcd=gcd(e[p<<1|1].Gcd,e[p<<1].Gcd);
}
inline void build(int p,int l,int r){
e[p].l=l,e[p].r=r;
if(l==r){
e[p].Gcd=x[l];
return;
}
int mid=(l+r)>>1;
build(p<<1,l,mid);
build(p<<1|1,mid+1,r);
pushup(p);
}
inline int ask(int p,int l,int r){
if(l<=e[p].l&&e[p].r<=r){
return e[p].Gcd;
}
int ans=0,mid=(e[p].l+e[p].r)>>1;
if(l<=mid)ans=gcd(ans,ask(p<<1,l,r));
if(r>mid)ans=gcd(ans,ask(p<<1|1,l,r));
pushup(p);
return ans;
}
signed main(){
while(T--){
if(n==1){print(1);continue;}
n=read();
for(int i=1;i<=4*n+1;i++)e[i].l=e[i].r=e[i].Gcd=0;
for(int i=1;i<=n;i++)x[i]=0;
x[1]=read();
for(int i=2;i<=n;i++){
x[i-1]=abs(read()-x[i-1]);
}
build(1,1,n-1);
int j=1,maxn=0;
for(int i=1;i<n;i++){
while(j<=i&&ask(1,j,i)==1)j++;
maxn=max(maxn,i-j+2);
}
print(maxn),endl;
}
return 0;
}