hdu 4513 吉哥系列故事――完美队形II (Manacher)
2015-02-13 20:05
274 查看
题意:
给出一个队列,求出这个队列满足既是回文并且左断点到终点是成递增的最长子队列。
题解:
dp,kmp,Manacher,都可以解决。Manacher最高效。
给出一个队列,求出这个队列满足既是回文并且左断点到终点是成递增的最长子队列。
题解:
dp,kmp,Manacher,都可以解决。Manacher最高效。
#include<iostream> #include<math.h> #include<stdio.h> #include<algorithm> #include<string.h> #include<vector> #include<map> using namespace std; //typedef long long lld; const int oo=0x3f3f3f3f; //const lld OO=1LL<<61; const int MOD=10007; const int maxn=200010; int h[maxn],n,len; int p[maxn]; int Manacher() { int mx=0,id=0; for(int i=1;i<=len;i++) { if(mx>i) p[i]=min(mx-i,p[2*id-i]); else p[i]=1; while(h[i+p[i]]==h[i-p[i]]&&h[i-p[i]]<=h[i-p[i]+2]) p[i]++; if(p[i]+i>mx) { mx=p[i]+i; id=i; } } int ans=0; for(int i=1;i<=len;i++) ans=max(ans,p[i]-1); return ans; } int main() { int T; scanf("%d",&T); while(T--) { scanf("%d",&n); len=0; h[len]=oo; for(int i=1;i<=n;i++) { h[++len]=-1; scanf("%d",&h[++len]); } h[++len]=-1; h[++len]=-oo; printf("%d\n",Manacher()); } return 0; } /** 2 3 51 52 51 4 51 52 52 51 */
相关文章推荐
- hdu 4513 吉哥系列故事——完美队形II(Manacher)
- hdu 4513 吉哥系列故事――完美队形II(Manacher算法求回文串长度)
- HDU 4513 吉哥系列故事――完美队形II(manacher)
- hdu 4513 吉哥系列故事——完美队形II ( manacher+dp )
- Hdu 4513 吉哥系列故事——完美队形II (manacher变形)
- HDU 4513 吉哥系列故事——完美队形II(Manacher)
- HDU 4513 吉哥系列故事 完美队形II (manacher)
- hdu 4513 吉哥系列故事——完美队形II(manacher)
- HDU 4513 吉哥系列故事——完美队形II (Manacher变形)
- HDU 4513 吉哥系列故事——完美队形II(Manacher)
- HDU 4513 吉哥系列故事――完美队形II(Manacher)
- hdu-4513 吉哥系列故事——完美队形II 【Manacher】
- hdu 4513 吉哥系列故事――完美队形II(Manacher算法求回文串长度)
- hdu 4513 吉哥系列故事——完美队形II(manacher)
- HDU---4513-吉哥系列故事――完美队形II (manacher)
- hdu----(4513)吉哥系列故事——完美队形II(manacher(最长回文串算法))
- HDU 4513 吉哥系列故事――完美队形II(Manacher)
- HDU 4513 吉哥系列故事——完美队形II manacher求最长回文
- HDU - 4513 吉哥系列故事――完美队形II(manacher)
- hdu 4513 吉哥系列故事——完美队形II(manacher)