摘要: 对于一个数,可以记录3个位置:初始位置,终点位置,最右边的位置。 初始位置和终点位置容易计算。最多边的位置即为初始状态下该数的位置+该数之后还有多少数比该数小。 三个位置中的min即为leftpos,max即为rightpos 阅读全文
posted @ 2016-07-30 15:21 Fighting_Heart 阅读(141) 评论(0) 推荐(0) 编辑
摘要: 简单dp+KMP。记dp[i]为以0--i能表达的意义种类。 如果以s[i]为结尾的后缀不匹配,那么dp[i]=dp[i-1]。 如果以s[i]为结尾的后缀匹配,那么dp[i]=dp[i-1]+dp[i-len]; (即表达第一种意思的种类数+表达第二种意思的种类数) 阅读全文
posted @ 2016-07-30 15:18 Fighting_Heart 阅读(203) 评论(0) 推荐(0) 编辑
摘要: 这题想了1个多小时想不出来...方法真是精妙... 官方题解:0可以转化成任意整数,包括负数,显然求LIS时尽量把0都放进去必定是正确的。因此我们可以把0拿出来,对剩下 的做O(nlogn)的LIS,统计结果的时候再算上0的数量。为了保证严格递增,我们可以将每个权值S[i]减去i前面0的个 数,再做 阅读全文
posted @ 2016-07-30 15:15 Fighting_Heart 阅读(166) 评论(0) 推荐(0) 编辑
摘要: 中国剩余定理+容斥原理。 阅读全文
posted @ 2016-07-30 15:14 Fighting_Heart 阅读(152) 评论(0) 推荐(0) 编辑
摘要: 后缀数组。 然后按照排序完成之后的顺序,每个后缀统计贡献量。 统计第i个后缀的贡献的时候,如果这个后缀中没有X,贡献度为0。 有贡献的分3种情况考虑: 1.如果这个后缀height部分等于0(即与前一个后缀没有公共前缀),那么在height之后的部分中找到第一个X的位置pos,n-pos为贡献度。 阅读全文
posted @ 2016-07-30 15:10 Fighting_Heart 阅读(164) 评论(0) 推荐(0) 编辑
摘要: 后缀数组。按照排序完的后缀一个一个统计。每一个后缀对答案做出的贡献为:n-SA[i]-height[i]。 阅读全文
posted @ 2016-07-30 13:42 Fighting_Heart 阅读(209) 评论(0) 推荐(0) 编辑
摘要: 后缀数组。求可重叠的至少出现k次的最长子串。 阅读全文
posted @ 2016-07-30 12:33 Fighting_Heart 阅读(132) 评论(0) 推荐(0) 编辑
摘要: 后缀数组。求不可重叠最长重复子串。 二分答案+验证。每一次二分,将排序完序的后缀按顺序进行分组。每组内任意两个的最长公共前缀要>=二分值。如果有一组内存在两个后缀的SA值相差大于等于二分值,那么这个二分值可行。 阅读全文
posted @ 2016-07-30 12:18 Fighting_Heart 阅读(123) 评论(0) 推荐(0) 编辑