上一页 1 2 3 4 5 6 7 8 9 ··· 65 下一页
摘要: 本质不同子串数量等于所有点的len-parent树上父亲的len的和。可以直接维护。 阅读全文
posted @ 2019-05-04 22:55 Gloid 阅读(130) 评论(0) 推荐(0) 编辑
摘要: 二分答案后相当于判断一个区间的后缀与某个后缀的最长公共前缀是否能>=ans。建出后缀树,在上述问题中后者所在节点向上倍增的跳至len>=ans的最高点,然后相当于查询子树中是否有该区间的节点。主席树进行二维数点即可。 阅读全文
posted @ 2019-05-04 19:58 Gloid 阅读(185) 评论(0) 推荐(0) 编辑
摘要: 利用SAM建出后缀树,树上每个节点计算一下|right|、right集合中ai的最大、次大、最小、次小值即可。 阅读全文
posted @ 2019-05-04 13:23 Gloid 阅读(130) 评论(0) 推荐(0) 编辑
摘要: 对第一个串建SAM,第二个串在上面跑,记录当前前缀匹配的最长后缀长度l,每次考虑当前前缀的贡献,对于当前所在节点显然是|right|*(l-len[fa]),而对于其parent树上所有祖先的贡献显然是|right|*(len-len[fa])。预处理一下就好了。 阅读全文
posted @ 2019-05-04 01:06 Gloid 阅读(151) 评论(0) 推荐(0) 编辑
摘要: 先考虑相同子串视为一个。按SAM的拓扑序预处理出从每个节点开始能得到多少个本质不同子串(注意虽然一个节点对应多个子串,但到达该点时当前的子串显然是确定为其中一个的),然后按位贪心即可。 相同子串视为多个的做法也没有本质区别。求出每个节点的right集合大小,同样预处理出从每个节点开始能得到多少个子串 阅读全文
posted @ 2019-05-03 23:06 Gloid 阅读(119) 评论(0) 推荐(0) 编辑
摘要: 差分后即求多串LCS。先考虑两个串怎么做。对第一个串建SAM,第二个串在上面跑即可,任意时刻走到的节点表示的都是第二个串的当前前缀在第一个串中出现的最长的后缀,具体计算长度时每走一个字符长度+1,跳fail时将长度重设为当前节点maxlen即可。 扩展到多串,同样对第一个串建SAM,后面每个串在上面 阅读全文
posted @ 2019-05-03 17:40 Gloid 阅读(167) 评论(0) 推荐(0) 编辑
摘要: 暴力树剖做法显然,即使做到两个log也不那么优美。 考虑避免树剖做到一个log。那么容易想到树上差分,也即要对每个点统计所有经过他的路径产生的总贡献(显然就是所有这些路径端点所构成的斯坦纳树大小),并支持在一个log内插入删除合并。 考虑怎么求树上一些点所构成的斯坦纳树大小。由虚树的构造过程容易联想 阅读全文
posted @ 2019-05-02 19:32 Gloid 阅读(193) 评论(0) 推荐(0) 编辑
摘要: A:注意到2和两个1几乎没有差别,因为除2外的偶数都不是质数。于是最开始放一个2,然后放奇数个1,再把2放完,最后若有1再排在最后即可。 B:考虑单组询问怎么做。设f[a][b][c]为最短的前缀长度满足能从中挑出第一种宗教的前a位、第二种宗教的前b位、第三种宗教的前c位。转移考虑最后一个被挑出的字 阅读全文
posted @ 2019-05-01 20:39 Gloid 阅读(180) 评论(0) 推荐(0) 编辑
摘要: 考虑无修改怎么做。对于1~n的每个数,若其存在,将最后一个放在其值的位置,剩余在其前面依次排列,答案即为值域1~n上没有数的位置个数。带修改显然记一下偏移量线段树改一改就好了。 阅读全文
posted @ 2019-04-30 13:31 Gloid 阅读(170) 评论(0) 推荐(0) 编辑
摘要: A:奇偶配对。 B:从高位到低位考虑,每遇到一个0就考虑将其改成1,即如果该位之后全是0就改下一位,否则改这一位。 C:显然无论如何变化两者gcd一定是a-b的因子。确定gcd(是某数倍数)的情况下很容易求出最小k。枚举每个因子取最优解即可。 D:做法似乎非常多。考虑n++后树形态的变化。可以发现是 阅读全文
posted @ 2019-04-29 17:40 Gloid 阅读(166) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 8 9 ··· 65 下一页