51nod 1254 最大子段和 V2

sad_lin發表於2024-09-10

51nod 1254 最大子段和 V2

image


#include <bits/stdc++.h>
using namespace std;
#define ll long long
int n;
ll a[50005];
ll sum[50005];
ll lmax[50005],rmax[50005];
int main(){
    ios::sync_with_stdio(false);
    cin>>n;
    for(int i=1;i<=n;i++){
    	cin>>a[i];
    	sum[i]=sum[i-1]+a[i];
	}
    for(int i=0;i<n;i++){
    	lmax[i+1]=max(lmax[i],a[i+1]);
		rmax[n-i]=max(rmax[n-i+1],a[n-i]);
	}
	int maxi=n;
	ll ans=0,ssum=0;
	for(int i=n;i>=1;i--){
		if(sum[i]>=sum[maxi]){
			maxi=i;
			ssum=sum[i]-a[i];
		}
		ssum=max(ssum,sum[maxi]-a[i]);
		ans=max(ans,ssum-sum[i-1]+max(lmax[i-1],rmax[maxi+1])); 
	}
	cout<<ans;
    return 0;
}

相關文章