60pts求调QAQ
查看原帖
60pts求调QAQ
1074321
a_tall_bird楼主2025/6/14 13:33
#include<bits/stdc++.h>
using namespace std;
long long n,a[400005],f1[400005],f2[400005],sum,ans=INT_MIN,ans1=INT_MAX,m1[400005],m2[400005];
int main(){
	cin>>n;
	for(int i=1;i<=n;i++)cin>>a[i],sum+=a[i];
	f1[1]=a[1];
	m1[1]=a[1];
	for(int i=2;i<=n;i++){
		f1[i]=max(f1[i-1],0ll)+a[i];
		m1[i]=max(m1[i-1],f1[i]);
	}
	f2[n+1]=0;
	m2[n+1]=0;
	for(int i=n;i>=1;i--){
		f2[i]=max(f2[i+1],0ll)+a[i];
		m2[i]=max(m2[i+1],f2[i]);
	}
	for(int i=1;i<=n;i++){
		ans=max(ans,m1[i]+m2[i]);
	}
	memset(f1,0x3f,sizeof f1);
	memset(f2,0x3f,sizeof f2);
	m1[1]=a[1];
	f1[1]=a[1];
	m2[n+1]=0;
	f2[n+1]=0;
	for(int i=2;i<=n;i++){
		f1[i]=min(f1[i-1],0ll)+a[i];
		m1[i]=min(m1[i-1],f1[i]);
	}
	for(int i=n;i>=1;i--){
		f2[i]=min(f2[i+1],0ll)+a[i];
		m2[i]=min(m2[i+1],f2[i]);
	}
	for(int i=1;i<=n;i++){
		ans1=min(ans1,m1[i]+m2[i]);
	}
	cout<<max(ans,sum-ans1);
}
2025/6/14 13:33
加载中...