不带删除的双指针
%%%
给定一个长度为
考虑双指针,但是双指针需要支持插入或删除一个数,而一些信息不方便删除或删除复杂度较高(
适用条件:两个区间
维护左指针
初始时指针都指向
1.将
2.然后每次将
显然
模板题:CF1548B Integers Have Friends
用双指针找到差分数组的
乘上
#include<bits/stdc++.h>
using namespace std;
enum{N=200009};
using ll=long long;
ll a[N],p[N];
int main(){ios::sync_with_stdio(0),cin.tie(0);
int T,n,i,l,r,m,s;
ll w;
for(cin>>T;T--;cout<<s+2<<'\n'){
for(cin>>n,i=1,s=-1;i<=n;++i)cin>>a[i];
for(i=r=1;i<n;++i)a[i]=a[i+1]-a[i];
gg:;
for(m=l=r,p[l+1]=w=0;l;--l)if((p[l]=gcd(p[l+1],a[l]))==1)break;//左移l
if(r<n)for(++l;s=max(s,r-l),(++r)<n;){//右移r
for(w=gcd(w,a[r]);l<=m&&gcd(p[l],w)==1;++l);//右移l
if(l>m)goto gg;
}
}
return 0;
}