玄关
查看原帖
玄关
846303
Stdinout楼主2023/10/14 21:50
#include <stdio.h>
long long max(long long x, long long y) { return x > y ? x : y; }
int abs(int x) { return x < 0 ? -x : x; }
int t, n, c[200005], cnt1, cnt2;
long long ans, sum, maxn;
int main()
{
	scanf("%d", &t);
	while(t --> 0)
	{
		ans = sum = maxn = cnt1 = cnt2 = 0;
		scanf("%d", &n);
		for(int i = 1; i <= n; --i)
		scanf("%*d");
		for(int i = 1; i <= n; ++i)
		scanf("%d", c + i);
		for(cnt1 = 0; cnt1 <= n; ++cnt1)
		if(c[cnt1 + 1] <= 0)
		break;
		for(cnt2 = n + 1; cnt2 > 0; --cnt2)
		if(c[cnt2 - 1] >= 0)
		break;
		for(int i = 1; i <= cnt1; ++i)
		sum += c[i];
		for(int i = 1; i <= cnt1; ++i)
		{
			maxn = max(maxn, sum - (c[i] << 1));
			sum -= c[i];
		}
		ans += maxn;
		maxn = 0;
		for(int i = n; i >= cnt2; --i)
		sum -= c[i];
		for(int i = n; i >= cnt2; --i)
		{
			maxn = max(maxn, sum + (c[i] << 1));
			sum += c[i];
		}
		ans += maxn;
		for(int i = cnt1 + 1; i < cnt2; ++i)
		ans += abs(c[i]);
		printf("%lld\n", ans);
	}
	return 0;
}
2023/10/14 21:50
加载中...