20分求助
查看原帖
20分求助
777809
IOI_AK_TLR楼主2024/9/27 17:35
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+10;
int n,a[N],sum[N],tmp,loc1,loc2,ans;
int dis(int p,int q){
	if(p>q)
		swap(p,q);
	return min(q-p,sum[n+1]-q+p);
}
signed main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		sum[i+1]+=sum[i]+a[i];
	}
	for(int i=1;i<=n;i++){
		tmp=a[i]+sum[n+1]/2;
		tmp%=sum[n+1];
		if(tmp==0){
			loc1=1,loc2=1;
		}
		else if(tmp>sum[n]){
			loc1=n,loc2=1;
		}
		else if(tmp<sum[2]){
			loc1=1,loc2=2;
		}
		else{
			loc1=upper_bound(sum+1,sum+n+2,tmp)-sum-1;
			loc2=lower_bound(sum+1,sum+n+2,tmp)-sum;
		}
		ans=max(ans,dis(loc1,tmp));
		ans=max(ans,dis(loc2,tmp));
//		cerr<<tmp<<" "<<loc1<<" "<<loc2<<endl;
	}
	cout<<ans;
	return 0;
}
2024/9/27 17:35
加载中...