摘要: 求出一个串使得这个串是$s1,s2$的子串。串中不包含$s3$。 如果没有这个$s3$就可以二分答案,然后height小于二分值分一组。看看每组里是不是出现过$s1,s2$的后缀。判断就行。 然后有了$s3$之后,我们考虑改变一下height数组。 我们把$s1s2$拼在一起构成一个新串$s$。(中 阅读全文
posted @ 2019-01-03 22:12 Xu-daxia 阅读(164) 评论(0) 推荐(0) 编辑
摘要: 很容易想到只考虑后缀长度必须为$max(height[rk[i]],height[rk[i]+1])+1$(即$[i,i+x 1]$代表的串只出现过一次)然后我正着做一遍反着做一遍,再取一个$min$最后挂了。。。 设$x=max(height[rk[i]],height[rk[i]+1])+1$我 阅读全文
posted @ 2019-01-03 21:53 Xu-daxia 阅读(240) 评论(0) 推荐(0) 编辑
摘要: 一开始的时候感觉就是一个主席树裸题。 然后发现自己错了。 首先建出后缀数组。 设$irk[j]$显然i更优。 如果$rk[i] include include include include include include include using namespace std; const int 阅读全文
posted @ 2019-01-03 09:13 Xu-daxia 阅读(223) 评论(0) 推荐(0) 编辑
摘要: 喜闻乐见的LCT+SAM 此题要求动态插入,直接上后缀树。然后询问其实就是求一个节点的子树后缀结束节点的个数。 因为建立后缀树需要插入和删除,就直接上LCT。每次加入一个点,把它到根的路径加一 ~~(现在我才知道access之后那个splay就是这个点到根的路径,LCT学得不好)~~ 思路不需要说太 阅读全文
posted @ 2019-01-03 08:45 Xu-daxia 阅读(197) 评论(0) 推荐(0) 编辑
摘要: 后缀自动机有一个性质。 就是如果倒建SAM两个串的lcp就是这两个串的结束节点的LCA。 然后就可以愉快的跑DP了。 对于每一个后缀树上的节点$u$,它对$len[u]$的贡献是$\sum_{v1}\sum_{v2\neq{v1}}size[v1] size[v2]$当然如果u就是一个后缀的结尾就要 阅读全文
posted @ 2019-01-03 08:25 Xu-daxia 阅读(281) 评论(0) 推荐(0) 编辑
摘要: 我们把所有的名,姓,询问都拼起来构成一个新的长串,然后跑一边SA。排完序后对于每一个询问,我们可以二分求出它所对应的区间(即满足这个区间的前缀都是这个询问串)。然后问题就转化为很多区间问区间出现过的不同的数。这个东西可以用离线后吧询问按右端点从小到大排序+树状数组解决(HH的项链,采花)。 那么第二 阅读全文
posted @ 2019-01-03 08:12 Xu-daxia 阅读(201) 评论(0) 推荐(0) 编辑