从第一个点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;
}