随笔分类 -  数据结构—st表

该文被密码保护。
posted @ 2019-03-07 18:51 lokiii 阅读(9) 评论(0) 推荐(0)
摘要:把三个串加上ASCII大于z的分隔符连起来,然后求SA 显然每个相同子串都是一个后缀的前缀,所以枚举s1的每个后缀的最长和s2相同的前缀串(直接在排序后的数组里挨个找,最近的两个分别属于s1和s2的后缀的height一定是最长符合要求的前缀),然后判断一下这个子串里最早出现的和s3相同的子串的位置, 阅读全文
posted @ 2019-03-03 20:27 lokiii 阅读(125) 评论(0) 推荐(0)
摘要:总是犯低级错误,st表都能写错…… 正反分别做一遍SA,预处理st表方便查询lcp,然后处理a[i]表示前i个后缀一共有多少个本质不同的子串,这里的子串是按字典序的,所以询问的时候直接在a上二分排名就能得到询问区间,然后用正反st表查lcp即可 cpp include include include 阅读全文
posted @ 2019-02-26 11:36 lokiii 阅读(163) 评论(0) 推荐(0)
该文被密码保护。
posted @ 2018-11-14 14:42 lokiii 阅读(15) 评论(0) 推荐(0)
该文被密码保护。
posted @ 2018-10-29 15:17 lokiii 阅读(2) 评论(0) 推荐(0)
摘要:何万と積もった 懸念を 線状に 切り裂いていく 阅读全文
posted @ 2018-09-28 15:05 lokiii 阅读(177) 评论(0) 推荐(0)
该文被密码保护。
posted @ 2018-05-08 19:09 lokiii 阅读(4) 评论(0) 推荐(0)
摘要:要求区间取min和max,可以用st表或线段树维护 st表 cpp include include using namespace std; const int N=100005; int n,q,b[N],mn[N][20],mx[N][20]; int read() { int r=0,f=1; 阅读全文
posted @ 2018-04-25 07:47 lokiii 阅读(173) 评论(0) 推荐(0)
摘要:参考:https://www.cnblogs.com/CQzhangyu/p/7071477.html 神奇的点分治序(或者叫点剖?)。就是把点分治扫过的点依次放进队列里,然后发现,对于每一棵树摊到序列上,每个点的值v是重心到这个点的距离,那么对序列上的每个点定义l为这个子树重心在序列上的位置,r为 阅读全文
posted @ 2018-02-04 11:35 lokiii 阅读(176) 评论(0) 推荐(0)
摘要:设计一个五元组(i,l,r,p,v),表示在以i为左端点,右端点落在(l,r)中的情况下,取最大值v时右端点落在p。把这个五元组塞到优先队列里,以v排序,每次取出一个,然后把这个取过的五元组分成两个(i,l,p 1,p',v')(i,p+1,r,p'',v'')塞回去。 关于如何确定v和p,先求前缀 阅读全文
posted @ 2018-02-03 09:35 lokiii 阅读(140) 评论(0) 推荐(0)