后缀数组。
然后按照排序完成之后的顺序,每个后缀统计贡献量。
统计第i个后缀的贡献的时候,如果这个后缀中没有X,贡献度为0。
有贡献的分3种情况考虑:
1.如果这个后缀height部分等于0(即与前一个后缀没有公共前缀),那么在height之后的部分中找到第一个X的位置pos,n-pos为贡献度。
2.如果这个后缀height部分不等于0,如果这个后缀的height部分有X,那么贡献度为n-SA[i]-height[i];
3.如果这个后缀height部分不等于0,如果这个后缀的height部分没有X,那么需要在height之后的部分中找到第一个X的位置pos,n-pos为贡献度。
寻找pos的话,可以预处理前缀X个数sum[i],然后二分一下。
#pragma comment(linker, "/STACK:1024000000,1024000000")#include #include #include #include #include #include