题解:AT_abc483_d [ABC483D] Glitchy Robot
观察题目,发现至多翻转一个,考虑枚举翻转了哪一位。
当翻转了
具体来说,设
:::success[AC code]
#include<bits/stdc++.h>
//__xiaoY
typedef long long ll;
typedef unsigned long long ull;
using namespace std;
int a[200005];
ll sum[200005],ans;
ll pmn[200005],pmx[200005];
ll smn[200005],smx[200005];
signed main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i],sum[i]=sum[i-1]+a[i];
smn[n+1]=2e18;
smx[n+1]=-2e18;
for(int i=1;i<=n;i++)
{
pmn[i]=min(pmn[i-1],sum[i]);
pmx[i]=max(pmx[i-1],sum[i]);
}
for(int i=n;i>=1;i--)
{
smn[i]=min(smn[i+1],sum[i]);
smx[i]=max(smx[i+1],sum[i]);
}
ans=pmx[n]-pmn[n]+1;
for(int i=1;i<=n;i++)
{
ll ch=-a[i]*2;
ll lsz=min(pmn[i-1],smn[i]+ch);
ll rsz=max(pmx[i-1],smx[i]+ch);
ans=max(ans,rsz-lsz+1);
}
cout<<ans;
return 0;
}
:::