写到崩溃,然后发现是我教错题号了(qswlqswlqswl
int s[MX];
int rad[MX];
int Manacher(int n)
{
int MR=0,pos=0,mx=0;
for(int i=1;i<=n;++i)
{
rad[i]=i<MR?min(MR-i,rad[pos*2-i]):1;
while(s[i+rad[i]] == s[i-rad[i]] && (s[i+rad[i]]==1||s[i+rad[i]-2]>=s[i+rad[i]]))
{
++rad[i];
}
if(i+rad[i]>MR) MR=i+rad[i],pos=i;
mx=max(mx,rad[i]-1);
}
return mx;
}
inline void solve()
{
int n;rd(n);
s[0]=1111,s[n*2+2]=1111;
rpp(i,n)
{
rd(s[i*2]);
s[i*2-1]=s[i*2+1]=1;
}
printf("%d\n", Manacher(n*2+1));
}
signed main()
{
int T;rd(T);
while(T--) solve();
return 0;
}