上一页 1 ··· 9 10 11 12 13 14 15 16 17 ··· 19 下一页
摘要: "题意" 考虑第一问所求即为该串对应的节点的子树内终止节点的个数,而插入一个字符相当于在新增节点到根节点的链+1,于是用LCT维护。 code: 阅读全文
posted @ 2019-12-17 16:44 nofind 阅读(89) 评论(0) 推荐(0) 编辑
摘要: "题意" 因为一个$k$相似必定为$k 1,k 2....0$相似,对于一个$lcp$为$k$后缀对$(i,j)$,我们只用把它的贡献加在$k$的答案上,最后求一个后缀和和后缀max就可以得到答案。 考虑如何快速计算后缀对的贡献: 因为后缀对$(i,j),i j$的$lcp$是$min_{k=i+1 阅读全文
posted @ 2019-12-17 14:29 nofind 阅读(141) 评论(0) 推荐(0) 编辑
摘要: "题意" 承接 "上篇题解" 考虑两个后缀的$lcp$是什么,是将串反着插入后缀自动机后两个前缀(终止节点)的$lca$!!!于是可以在parent tree上DP了。 比后缀数组又简单又好写跑的还快。 code: 阅读全文
posted @ 2019-12-17 14:27 nofind 阅读(107) 评论(0) 推荐(0) 编辑
摘要: "题意" 考虑将$s1$和$s2$接在一起求出相同子串个数,再求出$s1$自己匹配的相同子串个数和$s2$自己匹配的相同子串个数减去即可。 如何求相同子串个数: 我们知道子串的集合即所有后缀的前缀集合,于是实际上答案就是: $\sum\limits_{i=1}^n\sum\limits_{j=i+1 阅读全文
posted @ 2019-12-17 10:15 nofind 阅读(99) 评论(0) 推荐(0) 编辑
摘要: "题意" 考虑式子前面那段其实是$(n 1) \frac{n (n+1)}{2}$,因为每个后缀出现了$n 1$次,后缀总长为$\frac{n (n+1)}{2}$。 现在考虑后面怎么求: $\sum\limits_{i=1}^{n}\sum\limits_{j=i+1}^nlcp(sa_i,sa_ 阅读全文
posted @ 2019-12-17 08:57 nofind 阅读(107) 评论(0) 推荐(0) 编辑
摘要: "题意" 显然如果有一个子串出现过$k$次,那么它必定是一个至少长为k的后缀序的$LCP$,求出所有相邻的长为$k 1$的$height$数组的最小值,在其中取最大值即可 code: 阅读全文
posted @ 2019-12-16 21:42 nofind 阅读(69) 评论(0) 推荐(0) 编辑
摘要: 关于SAM的介绍和构建见这几篇博客,这里主要是SAM的应用以及题目: "OI wiki" "洛谷日报" 应用: 1.求一个串出现次数 "模板题" 利用parent tree的性质,将每个叶子(其实就是所有前缀)的size设为1,一个点内所有串的出现次数即为子树内size大小(即叶子个数)。 正确性: 阅读全文
posted @ 2019-12-16 09:47 nofind 阅读(149) 评论(0) 推荐(0) 编辑
摘要: "题意" 第一问有一个经典做法: "学习笔记" 对于第二问,其实就是对于一个状态的所有串,第一问看成一个,第二问看成多个。 code: 阅读全文
posted @ 2019-12-16 09:46 nofind 阅读(111) 评论(0) 推荐(0) 编辑
摘要: "题意" 所谓线段树分裂其实是本题的在线做法。 考虑如果我们有一个已经排好序的区间的权值线段树,那么就可以通过线段树上二分的方法得到第$k$个数是谁。 于是用set维护每个升序/降序区间的左右端点以及对应的线段树根节点,区间排序就将区间拆出来,并将对应的线段树也拆出来。 拆线段树就是将前k个值建一棵 阅读全文
posted @ 2019-12-13 15:31 nofind 阅读(310) 评论(0) 推荐(0) 编辑
摘要: "题意" 这题的思路实在巧妙。 首先我们肯定无法对区间进行sort,那么考虑如何使得sort简化。 问:如果给的序列是一个0 1序列,让你区间排序,那么怎么做? 答:建一颗线段树维护sum,求出当前区间中1的数目(query)cnt,之后(以升序排序为例)[l,cnt]都赋值为1,[cnt+1,r] 阅读全文
posted @ 2019-12-13 15:29 nofind 阅读(155) 评论(0) 推荐(0) 编辑
上一页 1 ··· 9 10 11 12 13 14 15 16 17 ··· 19 下一页