#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];
inline long long read(long long &a){
int w=0,f=1;
char ch=getchar();
for(;ch<'0'||ch>'9';ch=getchar()) if(ch=='-') f=-1;
for(;ch>='0'&&ch<='9';ch=getchar()) w=(w<<3)+(w<<1)+(ch^48);
a=w*f;
}
void write(long long x){
if(x<0) putchar('-'),x=-x;
if(x>9) write(x/10);
putchar(x%10+'0');
}
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;
}
return fgcd(y, x%y);
}
int main() {
read(t);
while (t--) {
read(n);
logs[0] = -1;
ans = 0;
for (long long i = 1; i <= n; i++) {
read(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;
}
}
write(ans);
putchar(' ');
putchar('\n');
}
return 0;
}
TLE 8.20s
已经开快读了,丝毫没有变化。。。难道是我快读写错了?