hdu 4513 manacher 小变形

来源:互联网 发布:韩国面膜推荐知乎 编辑:程序博客网 时间:2024/05/06 14:12
#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;    }}

0 0