#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. 解决qt程序运行时的cannot create Qt for Embedded Linux data directory: /tmp/qtembedded-0出错情形

    1.mkdir /tmp 2.挂载 mount -t tmpfs -o size=32m none /tmp

  2. JS中parseInt()、Numer()深度解析

    JS中字符串转换为数字有两种方式: 1.parseInt函数 定义:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/ ...

  3. 慕课网__CSS__vertical align

  4. Java多线程初探

    多线程 单线程的程序只有一个顺序执行流.多个顺序流之间互不干扰. 多线程的创建 定义Thread类的子类,重写该类的run()方法. 创建Thread子类的实例. 调用线程对象的start()方法来启 ...

  5. ROS学习笔记(四)——环境变量配置

    1.查看环境变量配置情况,其实并没有什么卵用 $ export | grep ROS 或者用 $ printenv | grep ROS2.配置环境变量??$ source /opt/ros/indi ...

  6. C#中对IDisposable接口的理解

    http://blog.sina.com.cn/s/blog_8abeac5b01019u19.html C#中对IDisposable接口的理解 本人最近接触一个项目,在这个项目里面看到很多类实现了 ...

  7. linux command

    ubuntu start network:sudo service network-manager start

  8. ngui中 代码调用按钮事件(后来改成了按钮绑定键盘..)

    ngui中 代码调用按钮事件 好烦人啊这个问题, 我弄完发上来 这个问题解决了一半 发现可以用 按钮绑定来解决这个问题,并且更安全方便快速 直接在按钮上添加一个 key binding 指定按键 搞定 ...

  9. Inverted sentences

    And ever has it been that love knows not its own depth until the hour of separation.  除非临到了别离的时候,爱永远 ...

  10. ionic项目中手机状态栏显示使用$cordovaStatusbar插件

    在项目中发现Android和iOS在手机状态栏样式不一样,然后就查到有一个cordova插件可以解决这个问题 1.下载插件$cordovaStatusbar命令: cordova plugin add ...