从第一个点L依次枚举找到大于总和sum/2的点r,就停止往前寻找
#include<bits/stdc++.h>
using namespace std;
const int N=100010;
int a[N];
int n,m;
int main()
{
scanf("%d",&n);
int sum=0;
for(int i=1;i<=n;i++) {
scanf("%d",&a[i]);
sum+=a[i];}//总和sum;
int ans=0;
int len=0;
for(int l=1,r=0;l<=n;l++)
{
while((ans+a[r])<=sum/2&&r<=n)//找到r停止寻找,r不需要还原;
{
ans=ans+a[r];
r++;
}
len=max(ans,len);
ans=ans-a[l]; // 减去当前所在点l;
}
cout<<len<<endl;
return 0;
}