90分WA
查看原帖
90分WA
858267
lizi6666楼主2024/12/5 21:59

大佬求调

#include<bits/stdc++.h>
using namespace std;
#define int long long
int const N=110000;
int n,a[N];
int dfs(int l,int r){
	if(l==r)return a[l];
	int mid=(l+r)>>1;
	int lsum=dfs(l,mid);
	int rsum=dfs(mid+1,r);
	int lgcd1=a[mid],lgcd2=a[mid],s1=a[mid],lw=mid;
	for(int i=mid-1;i>=l;i--){
		lgcd1=__gcd(lgcd1,a[i]);
		if(s1<lgcd1*(mid-i+1)){
			s1=lgcd1*(mid-i+1);
			lgcd2=lgcd1;
			lw=i;
		}
	}int rgcd1=a[mid+1],rgcd2=a[mid+1],s2=a[mid+1],rw=mid+1;
	for(int i=mid+2;i<=r;i++){
		rgcd1=__gcd(rgcd1,a[i]);
		if(s2<rgcd1*(i-mid)){
			s2=rgcd1*(i-mid);
			rgcd2=rgcd1;
			rw=i;
		}
	}
	return max(max(lsum,rsum),__gcd(rgcd2,lgcd2)*(rw-lw+1));
}
signed main(){
	cin>>n;
	for(int i=1;i<=n;i++)cin>>a[i];
	cout<<dfs(1,n);
	return 0;
}
2024/12/5 21:59
加载中...