60pts求调
查看原帖
60pts求调
927580
zhangxiandong091228楼主2023/11/25 16:09

rt

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int NR=0x3ffff,N=2e5+5;
int n,qian[N],hou[N],a[N],sum=0,tot=0,i,j,res,lin;
int main()
{
    cin>>n;
    memset(qian,0,sizeof(qian));
	memset(hou,0,sizeof(hou));
    for(i=1;i<=n;i++)
    {
		cin>>a[i];
		sum+=a[i];
		tot+=a[i]>0;
	}
    for(i=1;i<=n;i++)
		qian[i]=max(qian[i-1],0)+a[i];
    for(i=n;i>0;i--)
		hou[i]=max(hou[i+1],0)+a[i];
    for(i=1;i<=n;i++)
		qian[i]=max(qian[i-1],qian[i]);
    for(i=n;i>0;i--)
		hou[i]=max(hou[i+1],hou[i]);
    for(i=1;i<n;i++)
		res=max(res,qian[i]+hou[i+1]);
		lin=res;
    if (tot==1)
	{
       cout<<res;
    }
	else
	{
        memset(qian,0,sizeof(qian));
	    memset(hou,0,sizeof(hou));
        for(i=1;i<=n;i++)
			a[i]=-a[i];
        for(i=1;i<=n;i++)
			qian[i]=max(qian[i-1],0)+a[i];
	    for(i=n;i>0;i--)
			hou[i]=max(hou[i+1],0)+a[i];
	    for(i=1;i<=n;i++)
			qian[i]=max(qian[i-1],qian[i]);
	    for(i=n;i>0;i--)
			hou[i]=max(hou[i+1],hou[i]);
	    for(i=1;i<n;i++)
			res=max(res,qian[i]+hou[i+1]);
		res+=sum;
        if(!res)
			res=-NR;
        cout<<max(lin,res);
    }
    return 0;
}
2023/11/25 16:09
加载中...