求调TLE,悬赏1关注
  • 板块题目总版
  • 楼主i_love_tym
  • 当前回复4
  • 已保存回复4
  • 发布时间2023/4/29 17:27
  • 上次更新2023/10/23 17:14:47
查看原帖
求调TLE,悬赏1关注
547457
i_love_tym楼主2023/4/29 17:27

code

#include<bits/stdc++.h>
#define int long long
using namespace std;
int T, n, gcd[100001][20], lg[100001], maxx = -0x3f3f3f3f;
int getnum(int l, int r) {
	int t = lg[r - l + 1];
	return __gcd(gcd[l][t], gcd[r - (1 << t) + 1][t]);
}
void initlg() {
	lg[0] = -1;
	for (int i = 1; i <= n; i++)  lg[i] = lg[i >> 1] + 1;
}
void initst() {
	for (int j = 1; j <= lg[n]; j++)
		for (int i = 1; i + (1 << j) - 1 <= n; i++)
			gcd[i][j] = __gcd(gcd[i][j - 1], gcd[i + (1 << (j - 1))][j - 1]);
}
signed main() {
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	initlg();
	cin >> T;
	for (int z = 1; z <= T; z++) {
		cin >> n;
		for (int i = 1; i <= n; i++)  cin >> gcd[i][0];
		initst();
		for (int i = 1; i <= n; i++) {
			int l, r;
			for (int j = i; j <= n; j++) {
				l = j, r = n + 1;
				int x = getnum(i, j);
				while (r - l > 1) {
					int mid = (l + r) >> 1;
					if (getnum(i, mid) == x)l = mid;
					else r = mid;
				}
				maxx = max(x * (l - i + 1), maxx);
				j = r + 1;
			}
		}
		cout << maxx << endl;
		maxx = -0x3f3f3f3f;
	}
}

P7009

可以过样例

2023/4/29 17:27
加载中...