博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
洛谷.3809.[模板]后缀排序(后缀数组 倍增) & 学习笔记
阅读量:4455 次
发布时间:2019-06-07

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

//输出ht见UOJ.35 #include
#include
#include
const int N=1e6+5;int n,tm[N],t1[N],t2[N],SA[N],rk[N],ht[N];//SA[i]=j:排名为i的后缀开头的下标为j //rk[i]=j:以下标i开头的后缀排名为j //ht[i]:排名为i的后缀与排名为i-1的后缀的LCP长度 char s[N];void Get_SA(){ int *x=t1,*y=t2,limit=80;//首先对单个字符进行排序,limit最初就为字符集大小(就是不同字符的个数) for(int i=0;i
=k) y[p++]=SA[i]-k;//剩下的有完整第二关键字的(SA[i]>=k)按顺序,即SA[i]排,第一关键字的位置自然就是SA[i]-k //对第一关键字的排序同对单个字符排序 for(int i=0;i
=n&&SA[i]+k>=n))) x[SA[i]]=p-1; else x[SA[i]]=p++; if(p>=n) break;//不同字符串数已有n个,再继续倍增不会变了,break }}void Calc_Ht(){ for(int i=0;i
=ht[rk[i-1]]-1 // 因为去掉开头字符 后缀一大部分是相等的。比较明显 for(int j,k=0,i=0;i

转载于:https://www.cnblogs.com/SovietPower/p/8435114.html

你可能感兴趣的文章
2981:大整数加法-poj
查看>>
hdu Piggy-Bank
查看>>
括号配对nyoj2(疑问)
查看>>
JS中的函数声明错误
查看>>
自我介绍
查看>>
一、harbor部署之centos7的基本配置
查看>>
swf version 与flash player 对应关系
查看>>
7种形式的Android Dialog使用举例【转】
查看>>
AC日记——逃出克隆岛 (bfs)
查看>>
POGO c++ code
查看>>
Ubuntu-12.04下Hadoop相关的SSH配置中遇到的几个问题
查看>>
每日一算法【one】
查看>>
一个简单的将Markdown二级标题进行排序的脚本
查看>>
android UI线程和非UI线程
查看>>
ExecuteReader()获得数据
查看>>
URL网址规范化
查看>>
Day 16 模块和包的导入
查看>>
21.python对象的浅拷贝和深拷贝
查看>>
.NET Core 构建跨平台的桌面应用
查看>>
C#.NET Winform 通用开发框架
查看>>