【bzoj】1717 [Usaco2006 Dec]Milk Patterns 产奶的模式
【算法】后缀数组
【题解】后缀数组
由于m太大,先离散化。
然后处理SA和LCP。
最后用单调队列处理即可。
注意实际上队列头尾长度限制是K-1.
删队尾不要删过头
i≥K才能开始统计答案。
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn=;
int n,m,s[maxn],x[maxn],y[maxn],base[maxn],sa[maxn],h[maxn],K,q[maxn];
struct lshs{int ord,num;}lsh[maxn];
bool cmp(lshs a,lshs b)
{return a.num<b.num;}
void build_sa(int m)
{
for(int i=;i<=m;i++)base[i]=;
for(int i=;i<=n;i++)base[x[i]=s[i]]++;
for(int i=;i<=m;i++)base[i]+=base[i-];
for(int i=n;i>=;i--)sa[base[x[i]]--]=i;
for(int k=;k<=n;k<<=)
{
int p=;
for(int i=n-k+;i<=n;i++)y[++p]=i;
for(int i=;i<=n;i++)if(sa[i]>k)y[++p]=sa[i]-k;
for(int i=;i<=m;i++)base[i]=;
for(int i=;i<=n;i++)base[x[i]]++;
for(int i=;i<=m;i++)base[i]+=base[i-];
for(int i=n;i>=;i--)sa[base[x[y[i]]]--]=y[i];
swap(x,y);
p=;x[sa[]]=;
for(int i=;i<=n;i++)
x[sa[i]]=y[sa[i]]==y[sa[i-]]&&y[sa[i]+k]==y[sa[i-]+k]?p:++p;
if(p>=n)break;
m=p;
}
int k=;
for(int i=;i<=n;i++)
{
if(k)k--;
int j=sa[x[i]-];
while(s[i+k]==s[j+k])k++;
h[x[i]]=k;
}
}
int main()
{
scanf("%d%d",&n,&K);
for(int i=;i<=n;i++)
{
scanf("%d",&lsh[i].num);
lsh[i].ord=i;
}
sort(lsh+,lsh+n+,cmp);
int p=;s[lsh[].ord]=;
for(int i=;i<=n;i++)s[lsh[i].ord]=lsh[i].num==lsh[i-].num?p:++p;
build_sa(p);
K--;
int head=,tail=;
int ans=;
for(int i=;i<=n;i++)
{
while(h[q[tail-]]>h[i]&&tail>head)tail--;
q[tail++]=i;
if(i-q[head]>=K)head++;
if(i>=K+)ans=max(ans,h[q[head]]);
}
printf("%d",ans);
return ;
}
【bzoj】1717 [Usaco2006 Dec]Milk Patterns 产奶的模式的更多相关文章
- BZOJ 1717: [Usaco2006 Dec]Milk Patterns 产奶的模式 [后缀数组]
1717: [Usaco2006 Dec]Milk Patterns 产奶的模式 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1017 Solved: ...
- BZOJ 1717: [Usaco2006 Dec]Milk Patterns 产奶的模式( 二分答案 + 后缀数组 )
二分答案m, 后缀数组求出height数组后分组来判断. ------------------------------------------------------------ #include&l ...
- BZOJ#1717:[Usaco2006 Dec]Milk Patterns 产奶的模式(后缀数组+单调队列)
1717: [Usaco2006 Dec]Milk Patterns 产奶的模式 Description 农夫John发现他的奶牛产奶的质量一直在变动.经过细致的调查,他发现:虽然他不能预见明天产奶的 ...
- BZOJ 1717: [Usaco2006 Dec]Milk Patterns 产奶的模式
Description 农夫John发现他的奶牛产奶的质量一直在变动.经过细致的调查,他发现:虽然他不能预见明天产奶的质量,但连续的若干天的质量有很多重叠.我们称之为一个"模式". ...
- 【刷题】BZOJ 1717 [Usaco2006 Dec]Milk Patterns 产奶的模式
Description 农夫John发现他的奶牛产奶的质量一直在变动.经过细致的调查,他发现:虽然他不能预见明天产奶的质量,但连续的若干天的质量有很多重叠.我们称之为一个"模式". ...
- BZOJ 1717 [Usaco2006 Dec]Milk Patterns 产奶的模式(后缀数组)
[题目链接]http://www.lydsy.com/JudgeOnline/problem.php?id=1717 [题目大意] 求一个最长的串,使得其在母串中出现的次数达到要求 [题解] 二分答案 ...
- bzoj 1717: [Usaco2006 Dec]Milk Patterns 产奶的模式【后缀自动机】
就是后缀自动机的板子嘛..构造完自动机之后拓扑一下,记录size,对于size大于k的点和ans取max #include<iostream> #include<cstdio> ...
- 1717: [Usaco2006 Dec]Milk Patterns 产奶的模式
1717: [Usaco2006 Dec]Milk Patterns 产奶的模式 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1469 Solved: ...
- bzoj1717: [Usaco2006 Dec]Milk Patterns 产奶的模式
后缀数组+二分答案+离散化.(上次写的时候看数据小没离散化然后一直WA...写了lsj师兄的写法. #include<cstdio> #include<cstring> #in ...
随机推荐
- iOS开发本地通知
/* 本地通知:不通过网络,在本地实现的通知,自己发给自己 远程通知:必须通过网络,使用推送技术(APNs),实现通知 本地通知: 1.要完成可以接收的通知形式的注册 2.具体通知的设置 3.发送通知 ...
- CentOS 6安装thrift支持erlang开发
早前,在我的博文thrift多平台安装介绍了如何在debian/ubuntu下面安装thrift,并支持erlang开发的.而在CentOS平台下,并没有成功安装.经过不断摸索,终于成功了,这篇博文就 ...
- js jQuery 判断跳转是手机还是电脑
<script type="text/javascript"> $(function () { var system = {}; var p = navigator.p ...
- 【Docker 教程】- Docker 架构
1.Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器. 2.Docker 容器通过 Docker 镜像来创建. 3.容器与镜像的关系类似于面向对象编程 ...
- parse_str — 将字符串解析成多个变量
$arr2="first=value1&second=value2&third[]=value3&third[]=value4"; parse_str($a ...
- 微信小程序 功能函数 计时器
let lovetime = setInterval(function () { let str = '(' + n + ')' + '重新获取' that.setData({ getText2: s ...
- 在DBGrid中可选中行而又可进入编辑状态
如何在DBGrid中选中行,而又让它可以进入编辑状态? 也许你会问我这有什么用?呵呵,做数据库应用的兄弟们会深有感触,当用DBGrid显示的字段过多时,用户不得不拉动最下面的滚动条,去看最右边的东西, ...
- RT-thread main函数分析
RT-thread系统的main函数位于startup.c文件中. /** * This function will startup RT-Thread RTOS. */ void rtthread_ ...
- hdu 1688 Sightseeing (最短路径)
Sightseeing Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- P1955 [NOI2015]程序自动分析
题目描述 在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足. 考虑一个约束满足问题的简化版本:假设x1,x2,x3...代表程序中出现的变量,给定n个形如xi=xj或xi≠xj的变 ...