#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
int ws[],wa[],wb[],sa[],x[],y[],h[],wv[],a[],b[],rank[];
int cmp(int *r,int a,int b,int l){return (r[a]==r[b])&&(r[a+l]==r[b+l]);}
void DA(int *r,int *sa,int n,int m)
{
  int i,j,p,*x=wa,*y=wb,*t;
  for(i=;i<m;i++)ws[i]=;
  for(i=;i<n;i++)ws[x[i]=r[i]]++;
  for(i=;i<m;i++)ws[i]+=ws[i-];
  for(i=n-;i>=;i--)sa[--ws[x[i]]]=i;
  for(j=,p=;p<n;j*=,m=p)
  {
    for(p=,i=n-j;i<n;i++)y[p++]=i;
    for(i=;i<n;i++)if(sa[i]>=j)y[p++]=sa[i]-j;
    for(i=;i<n;i++)wv[i]=x[y[i]];
    for(i=;i<m;i++)ws[i]=;
    for(i=;i<n;i++)ws[wv[i]]++;
    for(i=;i<m;i++)ws[i]+=ws[i-];
    for(i=n-;i>=;i--)sa[--ws[wv[i]]]=y[i];
    for(t=x,x=y,y=t,p=,x[sa[]]=,i=;i<n;i++)
    x[sa[i]]=cmp(y,sa[i-],sa[i],j)?p-:p++;
  }
}
void calheight(int n)
{
  int i,j,k=;
  memset(rank,,sizeof(rank));
  for(i=;i<n;i++)rank[sa[i]]=i;
  for(i=;i<n;h[rank[i++]]=k)
  for(k?k--:,j=sa[rank[i]-];b[i+k]==b[j+k];)
  k++;
}
int solve(int o,int n)
{
  int min,max,i;
  max=-0x7fffffff;
  min=0x7fffffff;
  for(i=;i<=n;i++)
  {
    if(h[i]>=o)
    {
      if(sa[i]>max)max=sa[i];
      if(sa[i]<min)min=sa[i];
      if(max-min>=o)return ;
    }
    else
    {
      max=-0x7fffffff;
      min=0x7fffffff;
      if(sa[i]>max)max=sa[i];
      if(sa[i]<min)min=sa[i];
    }
  }
  if(max-min>=o)return ;
  return ;
}
void ef(int low,int high,int n)
{
  int mid;
  while(low<high-)
  {
    mid=(low+high)/;
    if(solve(mid,n)==)
    {
      low=mid;
    }
    else
    {
      high=mid;
    }
  }
  if(low<)printf("0\n");
  else printf("%d\n",low+);
}
int main()
{   int n,i,max,min;
  while()
  {
    memset(ws,,sizeof(ws));
    memset(wa,,sizeof(wa));
    memset(wb,,sizeof(wb));
    memset(sa,,sizeof(sa));
    memset(h,,sizeof(h));
    memset(wv,,sizeof(wv));
    scanf("%d",&n);
    if(n==)break;
    for(i=;i<=n;i++)scanf("%d",&a[i]);
    if(n<)
    {
      printf("0\n");
      continue;
    }
    if(n==)
    {
      printf("0\n");
      continue;
    }
    for(i=;i<=n-;i++)b[i-]=a[i+]-a[i]+;
    b[n-]=;
    n--;
    max=-0x7fffffff;
    min=0x7fffffff;
    DA(b,sa,n+,);
    calheight(n+);
    max=-0x7fffffff;
    min=0x7fffffff;
    for(i=;i<n;i++)
    {
      if(h[i]>max)max=h[i];
      if(h[i]<min)min=h[i];
    }
    ef(,n,n);
  }
  return ;
}

Poj1743 (后缀数组)的更多相关文章

  1. [Poj1743] [后缀数组论文例题] Musical Theme [后缀数组不可重叠最长重复子串]

    利用后缀数组,先对读入整数处理str[i]=str[i+1]-str[i]+90这样可以避免负数,计算Height数组,二分答案,如果某处H<lim则将H数组分开,最终分成若干块,判断每块中是否 ...

  2. poj1743 后缀数组求不可重叠的重复出现的子串最长长度

    Musical Theme Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 25348   Accepted: 8546 De ...

  3. Musical Theme poj1743(后缀数组)

    Musical Theme Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 16757   Accepted: 5739 De ...

  4. poj1743 后缀数组, poj挂了 存个代码

    #include<bits/stdc++.h> #define LL long long #define fi first #define se second #define mk mak ...

  5. 【POJ1743】Musical Theme(后缀数组)

    [POJ1743]Musical Theme(后缀数组) 题面 洛谷,这题是弱化版的,\(O(n^2)dp\)能过 hihoCoder 有一点点区别 POJ 多组数据 题解 要求的是最长不可重叠重复子 ...

  6. poj1743(后缀数组)

    poj1743 题意 给出一个数字序列(串),现在要去寻找一个满足下列条件的子串: 长度不小于 5 存在重复的子串(如果把一个子串的所有数字都加上或减去一个值,与另一子串的数字对应相同,我们称它们重复 ...

  7. POJ1743 Musical Theme —— 后缀数组 重复出现且不重叠的最长子串

    题目链接:https://vjudge.net/problem/POJ-1743 Musical Theme Time Limit: 1000MS   Memory Limit: 30000K Tot ...

  8. P2743(poj1743) Musical Themes[差分+后缀数组]

    P2743 乐曲主题Musical Themes(poj1743) 然后呢这题思路其实还是蛮简单的,只是细节特别多比较恶心,忘记了差分带来的若干疏漏.因为转调的话要保证找到相同主题,只要保证一段内相对 ...

  9. POJ1743 Musical Theme 最长重复子串 利用后缀数组

    POJ1743 题目意思是求不重叠的最长相同变化的子串,输出该长度 比如1 2 3 4 5 6 7 8 9 10,最长长度为5,因为子串1 2 3 4 5 和 6 7 8 9 10变化都一样的 思路: ...

随机推荐

  1. Python3基础 列表之间+ 合并,不去除重复项

    镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ ...

  2. 20161127-emmagee

    Android 自动化测试 Emmagee Emmagee 是一个性能测试小工具 用来监控指定被测应用在使用过程中占用机器的CPU, 内存,流量资源的性能小工具 阅读目录 Emmagee 介绍 Emm ...

  3. 开始学习Angular Mobile UI

    介绍 Mobile AngularUI 可以让你使用Twitter Booostrap和Angular JS来开发混合移动App和桌面应用程序. 下面是是一些贯穿整个项目的步骤,我强烈的建议你去继续阅 ...

  4. centos7 加入自启动服务的方法 以jexus为例

    在/lib/systemd/system 下创建文件jexus.service vi jexus.service 内容如下 Unit Description=jexus After=network.t ...

  5. MySQL运算符和内置函数

    1.字符函数 CONCAT('a','-','b','-','c')效果等同于CONCAT_WS('-','a','b','c') FORMAT()的返回结果是字符型,会对操作数四舍五入,如:SELE ...

  6. Java项目JUnit简单使用

    前面自己写了一个计算器,准备用在项目里 http://www.cnblogs.com/blog5277/p/5707304.html 由于项目是用户计算跟钱有关的,所以这可不敢出BUG 于是就用了JU ...

  7. Ios二维码扫描(系统自带的二维码扫描)

    Ios二维码扫描 这里给大家介绍的时如何使用系统自带的二维码扫描方法和一些简单的动画! 操作步骤: 1).首先你需要搭建UI界面如图:下图我用了俩个imageview和一个label 2).你需要在你 ...

  8. javascript 随笔

    document.execCommand("SaveAs",true,"aaa"); //将当前web页面另存为文件.第三个参数为文件名,可以自己设置,为空的时 ...

  9. iOS - Share 分享/第三方登录

    1.系统方式创建分享 按照下图在 Info.plist 文件中将 Localization native development region 的值改为 China.如果不设置此项弹出的分享页面中显示 ...

  10. Pod 的安装

    1.如果之前已经安装过的 gem list --local | grep cocoapods 会看到如下输出: cocoapods (1.1.1)cocoapods-deintegrate (1.0. ...