求助TLE?
查看原帖
求助TLE?
1339889
pjh0625楼主2024/11/28 22:02
#include <bits/stdc++.h>
using namespace std;
int a[100010];
int st[100010][20];
int lg[100010];
int n;
void t(){
	lg[0] = -1;
	for (int i=1;i<=n;i++){
		st[i][0]=a[i];
		lg[i]=lg[i >> 1] + 1;
	}
	for (int j = 1; j <= lg[n];j++){
		for (int i = 1; i + (1 << (j - 1)) - 1 <= n; i++) {
			st[i][j] = __gcd(st[i][j - 1], st[i + (1 << (j - 1))][j - 1]);
		}
	}
}
int gcd(int l, int r) {
	int len = r - l + 1;
	int j = lg[len];
	return __gcd(st[l][j], st[r - (1 << j) + 1][j]);
}
int main(){
	cin >> n;
	for (int i = 1; i <= n; i++) {
		cin >> a[i];
	}
	t();
	int ans = 0;
	for (int i = 1; i <= n; i++) {
		for (int j = i; j <= n; j++) {
			ans = max(ans, gcd(i, j) * (j - i + 1));
		}
	}
	cout << ans << "\n";
	return 0;
}

2024/11/28 22:02
加载中...