#include<cstdio>
#include<iostream>
using namespace std;
int p[200007],a[200007];
int mana(int n) {
int maxl = 0,minx = 0,id;
for(int i=1;i<=n;i++) {
if(maxl>i)
p[i] = min(p[2*id-i],maxl-i);
else
p[i] = 1;
while(a[i+p[i]]==a[i-p[i]]){
if(!a[i+p[i]])p[i]++;
else {
int x = i+p[i];
int y = i-p[i];
if(a[x]<=a[x-2])
p[i]++;
else break;
}
}
if(maxl<p[i]+i){
maxl = p[i]+i;
id = i;
}
minx = max(minx,p[i]);
}
return minx;
}
int main()
{
int n,m,icase;
cin>>icase;
while(icase--)
{
scanf("%d",&n);
int k = 2;
a[0] = -1,a[1] = 0;
while(n--)
{
scanf("%d",&m);
a[k++] = m;
a[k++] = 0;
}
cout<<mana(k)-1<<endl;
}
}
hdu 4513 manacher 小变形
最新推荐文章于 2020-08-01 12:30:46 发布
