我们枚举以a[i]为结尾的子段,找出最大的子段
cpp
#include <iostream>
using namespace std;
const int N = 2e5+10;
int a[N],f[N];
int main()
{
int n;cin >> n;
for(int i = 1;i<=n;i++)
{
cin >> a[i];
f[i] = f[i-1] + a[i];
}
int ret = -2e5+10;
int premin = 0;
for(int i = 1;i<=n;i++)
{
ret=max(ret,f[i]-premin);
premin = min(premin,f[i]);
}
cout << ret << endl;
return 0;
}