博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【模板】BZOJ 1692:队列变换—后缀数组 Suffix Array
阅读量:4568 次
发布时间:2019-06-08

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

传送门:

题意:

给出一个长度为N的字符串,每次可以从串头或串尾取一个字符,添加到新串中,使新串的字典序最小。

做法:

经过推导(略),发现只要贪心地取两端字典序较小的一端,所以在一开始对所有的正反后缀排序,即把原串倒过来接在后面求一遍SA就行了。

写了个倍增求SA[]+height[]的板子,代码可能比较长,但相对来说可能容易理解一点...

#include 
#define TR(x) cout<<#x<<'='<
<
=0; --i) sa[--c[x[y[i]]]]=y[i];}inline int cmp(int *x, int a, int b, int k){return x[a]==x[b]&&x[a+k]==x[b+k];}void getsa(){ int *x=ht, *y=rk, up=30; for(int i=0; i
=k) y[p++]=sa[i]-k; rsort(x,y,up); swap(x,y); p=1; x[sa[0]]=0; for(int i=1; i

转载于:https://www.cnblogs.com/will7101/p/6627814.html

你可能感兴趣的文章
阻止putty变成inactive
查看>>
TP框架代码学习 学习记录 3.2.3
查看>>
doc文档生成带目录的pdf文件方法
查看>>
js数组,在遍历中删除元素(用 for (var i in arr)是无效的 )
查看>>
通过前端上传图片等文件的方法
查看>>
在 OC 中调用 Swift 代码
查看>>
Android仿腾讯应用宝 应用市场,下载界面, 有了进展button
查看>>
安卓|五大逆向软件下载
查看>>
5 OK6410裸机调试(不用Jlink)
查看>>
“模板”学习笔记(5)-----编译器在处理函数模板的时候都干了啥
查看>>
教你用shell写CGI程序
查看>>
窗口 对话框 Pop Dialog 示例
查看>>
ubuntu(centos) server安装vmware tools
查看>>
数据结构之最大不重复串
查看>>
为什么要配置sdk-tools/platform-toools?
查看>>
自己动手开发更好用的markdown编辑器-07(扩展语法)
查看>>
maven dependency:tree中反斜杠的含义
查看>>
队列的循环队列
查看>>
程序中的日期格式
查看>>
大众点评CAT错误总结以及解决思路
查看>>