题目连接
a1 a2 a3 a4 a5 对于此数列,以a2为平衡点,
左侧=a1
右侧=a3+2a4+3a5
i=2 => i=3时
左侧 a1-> 2a1+a2 多了a1+a2 左侧加pre i
右侧 a3+2a4+3a5 ->a4+2a5 少了a3+a4+a5 右侧减suf i+1
预处理pre i: i下标前缀和
suf i:i 位置后缀和
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int n;
ll a[100005],ans,left1,right1,pre[100005],suf[100005];
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)scanf("%lld",a+i);
for(int i=1;i<=n;i++)pre[i]=pre[i-1]+a[i];
for(int i=n;i>=1;i--)suf[i]=suf[i+1]+a[i];
for(int i=2;i<=n;i++)right1+=(i-1)*a[i];
ans=right1;
for(int i=1;i<n;i++)
{
left1+=pre[i];
right1-=suf[i+1];
ans=min(ans,abs(right1-left1));
}
printf("%lld",ans);
return 0;
}