70pt求调
查看原帖
70pt求调
768725
jer_chou楼主2024/5/23 14:36
#define _CRT_SECURE_NO_WARNINGS 1
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <map>
using namespace std;

typedef long long ll;
ll N;
ll pre[1000009];
ll min_pre[1000009];
ll back[1000009];
ll min_back[1000009];
ll dp1[1000009];
ll dp2[1000009];

int main()
{
	ll ans = -0x7FFFFFFFFFFFFFFF;
	scanf("%lld", &N);
// 	min_pre[0]=0x7FFFFFFF;
	for (int i = 1; i <= N; i++) {
		scanf("%lld", pre + i);
		pre[i] += pre[i - 1];
		min_pre[i] = pre[i];
// 		if(i!=1)
		min_pre[i] = min(min_pre[i], min_pre[i - 1]);
	}
// 	min_back[N+1]=0x7FFFFFFF;
	for (int i = N; i; --i) {
		back[i] = pre[i] - pre[i - 1];
		back[i] += back[i + 1];
		min_back[i] = back[i];
// 		if(i!=N)
		min_back[i] = min(min_back[i], min_back[i + 1]);
	}
	for (int i = 1; i <= N; i++) {
		dp1[i] = pre[i] - min_pre[i - 1];
		dp1[i]=max(dp1[i],dp1[i-1]);
	}
	for (int i = 1; i <= N; i++) {
		dp2[i] = back[i] - min_back[i + 1];
		dp2[i]=max(dp2[i],dp2[i+1]);
	}
	for (int i = 2; i < N; i++) {
		ans = max(ans, dp1[i - 1] + dp2[i + 1]);
	}
	printf("%lld", ans);
}
2024/5/23 14:36
加载中...