hdu4513 (manacher)

题意:求最长回文子串,且从最左到mid是单调不降的。基本同manacher板子,就加了一个条件:

s[i+p[i]]<=s[i+p[i]-2]


#include 
#include 
#define N 100010
inline int read(){
	int x=0,f=1;char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-') f=-1;ch=getchar();}
	while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();
	return x*f;
}
template 
inline T min(T x,T y){return x=1&&i+p[i]<=n&&s[i-p[i]]==s[i+p[i]]&&s[i+p[i]]<=s[i+p[i]-2]) ++p[i];
			if(i+p[i]>mx) mx=i+p[i],id=i;
			if(p[i]>ans) ans=p[i];
		}
		printf("%d\n",ans-1);
	}
	return 0;
}


你可能感兴趣的:(其他oj,manacher)