题意:

求至少出现k次的最长字符串(可重复)

题解:

后缀数组维护height数组只要找连续k个的最小值

代码:

#include <cstdio>
#include <algorithm>
#include <iostream>
using namespace std;
#define maxn 1000010
int x[maxn],y[maxn],sa[maxn],height[maxn],
rank[maxn],c[maxn],a[maxn],h,t;
char s[maxn];
int n,m;
struct{
int num,ans;
}b[maxn];
void asa(int n,int m)
{
int p=,f=;
for (int i=;i<=m;i++) c[i]=;
for (int i=;i<=n;i++) c[x[i]=a[i]]++;
for (int i=;i<=m;i++) c[i]+=c[i-];
for (int i=n;i;i--) sa[c[x[i]]--]=i;
for(int i=;i<=n&&p<=n;i<<=)
{
p=;
for (int j=n-i+;j<=n;j++) y[++p]=j;
for (int j=;j<=n;j++)
if (sa[j]>i) y[++p]=sa[j]-i;
for (int j=;j<=m;j++) c[j]=;
for (int j=;j<=n;j++) c[x[y[j]]]++;
for (int j=;j<=m;j++) c[j]+=c[j-];
for (int j=n;j;j--) sa[c[x[y[j]]]--]=y[j];
swap(x,y); x[sa[]]=; p=;
for (int j=;j<=n;j++)
x[sa[j]]=y[sa[j]]==y[sa[j-]]&&y[sa[j]+i]==y[sa[j-]+i]
?p-:p++;
m=p;
}
for (int i=;i<=n;i++) rank[sa[i]]=i;
for (int i=;i<=n;i++)
{
int j=sa[rank[i]-];
if (f) f--;
while (a[i+f]==a[j+f]) f++;
height[rank[i]]=f;
}
}
void insert(int x,int y)
{
while (t>=h&&b[t].ans>=x) t--;
b[++t].num=y;
b[t].ans=x;
}
int main()
{
freopen("noip.in","r",stdin);
freopen("noip.out","w",stdout);
cin>>n>>m; m--;
for (int i=;i<=n;i++) cin>>a[i];
asa(n,);
for (int i=;i<=m-;i++) insert(height[i],i);
int ans=; h=;
for (int i=m;i<=n;i++)
{
insert(height[i],i);
if (t>=h&&b[h].num<i-m+) h++;
ans=max(b[h].ans,ans);
}
cout<<ans;
return ;
}

hdu3261的更多相关文章

随机推荐

  1. 任意两点间的最短路问题(Floyd-Warshall算法)

    #define _CRT_SECURE_NO_WARNINGS /* 7 10 0 1 5 0 2 2 1 2 4 1 3 2 2 3 6 2 4 10 3 5 1 4 5 3 4 6 5 5 6 9 ...

  2. 后台拿webshell方法(2)

    在这里总结一下后台拿webshell的方法: 备份突破(在博客上有随笔介绍) 一般在后台上传文件类型受到限制,可以利用数据库备份将其上传的格式改为后门执行格式即可: asp更改为jpg     jpg ...

  3. C# Regex正则常用方法的使用

    using System; using System.Collections; using System.Configuration; using System.Data; using System. ...

  4. 第16月第8天 NSInvocation存储 函数指针 va_arg lldb

    1.NSInvocation存储 -(void)setInvok:(id)target sel:(SEL)sel key:(id)key { if(!target) return; NSMethodS ...

  5. POJ 2513 Colored Sticks (欧拉回路+并查集+字典树)

    题目链接 Description You are given a bunch of wooden sticks. Each endpoint of each stick is colored with ...

  6. jira7.3.6添加导出excel的按钮

    在 jira的application-data 文件夹下 jira-config.properties 文件(如果没有就创建一个) 中添加以下内容:jira.export.excel.enabled= ...

  7. MGR架构 ~ MGR+proxysql(2)

    一 简介: 上篇环境已经搭建完成,我们开始进行测试 二 工具和环境: sysbench ,mgr+proxysql 三 测试方式: sysbench+oltp.lua脚本 四 模拟故障 1 并发环境观 ...

  8. 编码器AE & VAE

    学习总结于国立台湾大学 :李宏毅老师 自编码器 AE (Auto-encoder)    & 变分自动编码器VAE(Variational Auto-encoder)             ...

  9. Win7 启动修复

    先让我们看一下windows7的启动过程的常识:电脑加电后,首先是启动BIOS程序,BIOS自检完毕后,找到硬盘上的主引导记录MBR,MBR读取DPT(分区表),从中找出活动的主分区,然后读取活动主分 ...

  10. xargs -i和-I的区别【转】

    xargs与find经常结合来进行文件操作,平时删日志的时候只是习惯的去删除,比如  # find . -type f -name "*.log" | xargs rm -rf * ...