摘要: 题目链接 每个子串都是一个后缀的前缀 每个后缀贡献的子串数目是len-sa[i]-height[i]; 因此可以二分找到一个子串的位置,要求某两个子串的最长公共前缀和最长公共后缀,把原串倒过再来一发就好,然后st表O(1)查询; 1 #include<algorithm> 2 #include<io 阅读全文
posted @ 2016-02-28 21:47 HugeGun 阅读(250) 评论(0) 推荐(0) 编辑
摘要: 题目链接 树状数组+单调栈 计算出每个后缀的前面、后面第一个h[]比它小的(前闭后开),乘起来计算答案 1 #include<algorithm> 2 #include<iostream> 3 #include<cstdlib> 4 #include<cstring> 5 #include<cstd 阅读全文
posted @ 2016-02-28 20:38 HugeGun 阅读(202) 评论(0) 推荐(0) 编辑
摘要: 题目链接 后缀数组+暴力枚举 1 #include<algorithm> 2 #include<iostream> 3 #include<cstdlib> 4 #include<cstring> 5 #include<cstdio> 6 #include<string> 7 #include<cma 阅读全文
posted @ 2016-02-28 19:34 HugeGun 阅读(184) 评论(0) 推荐(0) 编辑
摘要: 题目链接 一开始还想用o(n)贪心……想多了…… 后缀数组预处理之后通过比较rank来确定取前面的或者后面的 调了半天发现c[]开小了QAQ 1 #include<algorithm> 2 #include<iostream> 3 #include<cstdlib> 4 #include<cstri 阅读全文
posted @ 2016-02-28 11:00 HugeGun 阅读(117) 评论(0) 推荐(0) 编辑
摘要: 先求后缀数组、相邻两个后缀的最长公共前缀 二分答案,o(n)check 1 #include<algorithm> 2 #include<iostream> 3 #include<cstdlib> 4 #include<cstring> 5 #include<cstdio> 6 #include<s 阅读全文
posted @ 2016-02-28 08:56 HugeGun 阅读(475) 评论(0) 推荐(0) 编辑