题目 题意:给定n个点,求这n个点的最长同余子串。一个序列同余,当且仅当存在数m>1,使得序列中所有数在模m的意义下相等。
参考 思路:求原数组a的相邻元素的差分数组d,问题转化为求d数组的最长连续子数组,使得该数组的gcd>1,查询连续子数组的gcd可以用线段数(没看题解,一开始竟然没反应过来orz),由于又是连续连续的,且gcd的区间查询有非递增性(即子数组的gcd一定不小于母数组的gcd),可以用双指针优化。详见代码。
#include
using namespace std;
#define ll long long
const int maxn = 200010;
#define lson (rt
关注
打赏
热门博文