博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj3261 Milk Patterns
阅读量:5086 次
发布时间:2019-06-13

本文共 1966 字,大约阅读时间需要 6 分钟。

题目大意:给出n个数的序列和m,求数列中出现至少m次的最大长度。

本来可以用trie树和ac自动机/trie图搞一搞,但是数据范围太大。

后缀数组+RMQ:

#include
#include
using namespace std;#define N 20050int n,m,a[N];int rank[N],tr[N],sa[N],hs[1000005],h[N];struct node{ int x,id;}nd[N];bool vmp(node a,node b){ return a.x
n||y+k>n)return 0; return rank[x]==rank[y]&&rank[x+k]==rank[y+k];}void get_sa(){ int i,cnt=0; for(i=1;i<=n;i++)hs[a[i]]++; for(i=1;i<=n;i++)if(hs[i])tr[i]=++cnt; for(i=1;i<=n;i++)hs[i]+=hs[i-1]; for(i=n;i>=1;i--)rank[i]=tr[a[i]],sa[hs[a[i]]--]=i; for(int k=1;cnt!=n;k<<=1) { for(i=1;i<=n;i++)hs[i]=0; for(i=1;i<=n;i++)hs[rank[i]]++; for(i=1;i<=n;i++)hs[i]+=hs[i-1]; for(i=n;i>=1;i--)if(sa[i]>k)tr[sa[i]-k]=hs[rank[sa[i]-k]]--; for(i=1;i<=k;i++)tr[n-i+1]=hs[rank[n-i+1]]--; for(i=1;i<=n;i++)sa[tr[i]]=i; for(i=1,cnt=0;i<=n;i++)tr[sa[i]]=cmp(sa[i],sa[i-1],k)?cnt:++cnt; for(i=1;i<=n;i++)rank[i]=tr[i]; }}int f[N][18];void get_h(){ for(int i=1;i<=n;i++) { if(rank[i]==1)continue; for(int j=max(1,h[rank[i-1]]-1);;j++) { if(a[i+j-1]==a[sa[rank[i]-1]+j-1])h[rank[i]]=j; else break; } f[rank[i]][0]=h[rank[i]]; }}int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) scanf("%d",&nd[i].x),nd[i].id=i; sort(nd+1,nd+1+n,vmp); int las = -1,cnt = 0; for(int i=1;i<=n;i++) { if(nd[i].x!=las) { las = nd[i].x; cnt++; } a[nd[i].id]=cnt; } m--; get_sa(); get_h(); int lg = -1,u=m; while(u) { lg++; u>>=1; } for(int i=1;i<=lg;i++) { for(int j=1;j<=n;j++) { f[j][i]=min(f[j][i-1],f[j+(1<<(i-1))][i-1]); } } int ans = -0x7fffffff; for(int i=1;i+m-1<=n;i++) { ans=max(ans,min(f[i][lg],f[i+m-(1<

 

转载于:https://www.cnblogs.com/LiGuanlin1124/p/9700134.html

你可能感兴趣的文章
《梦断代码》读书笔记(三)
查看>>
spring security 11种过滤器介绍
查看>>
代码实现导航栏分割线
查看>>
大数据学习系列(8)-- WordCount+Block+Split+Shuffle+Map+Reduce技术详解
查看>>
Mysql性能调优
查看>>
ES6内置方法find 和 filter的区别在哪
查看>>
Android实现 ScrollView + ListView无滚动条滚动
查看>>
硬件笔记之Thinkpad T470P更换2K屏幕
查看>>
getElement的几中属性介绍
查看>>
HTML列表,表格与媒体元素
查看>>
设计器 和后台代码的转换 快捷键
查看>>
STL容器之vector
查看>>
数据中心虚拟化技术
查看>>
复习文件操作
查看>>
SQL Server 使用作业设置定时任务之一(转载)
查看>>
第二阶段冲刺-01
查看>>
BZOJ1045 HAOI2008 糖果传递
查看>>
JavaScript 克隆数组
查看>>
eggs
查看>>
python3 生成器与迭代器
查看>>