#include <iostream>
#include <algorithm>
using namespace std;
long long t;
long long n, m;
long long ans = 0;
long long a[100005];
long long logs[100005];
long long dp[100005][100];
extern inline long long fgcd(long long x, long long y);
long long ask(long long x, long long y){
long long lg = logs[y-x+1];
return fgcd(dp[x][lg], dp[y-(1<<lg)+1][lg]);
}
inline long long fgcd(long long x, long long y) {
if (x % y == 0) {
return y;
} else {
return fgcd(y, x%y);
}
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> t;
while (t--) {
cin >> n;
logs[0] = -1;
ans = 0;
for (long long i = 1; i <= n; i++) {
cin >> a[i];
dp[i][0] = a[i];
logs[i] = logs[i>>1]+1;
}
for (long long j = 1; j <= logs[n]; j++) {
for (long long i = 1; (i+(1<<j)-1) <= n; i++) {
dp[i][j] = fgcd(dp[i][j-1], dp[i+(1<<(j-1))][j-1]);
}
}
for (long long i = 1; i <= n; i++) {
long long x = i;
while (x <= n) {
long long l = x, r = n+1;
long long k = ask(i, x);
while(l - r > 1){
long long mid = (l + r) / 2;
if (ask(i, mid) == k) {
l = mid;
} else {
r = mid;
}
}
ans = max(ans, k * (l-i+1));
x = l + 1;
}
}
cout << ans << endl;
}
return 0;
}
听说灌水区大佬多。
求助https://www.luogu.com.cn/problem/P7009——Magical GCD怎么优化?
时间太长,TLE了。