#include<bits/stdc++.h>
//#define lowbit(x) x&(-x)
using namespace std;
//#define int long long
vector<int> a;
vector<int> b;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n;
cin>>n;
for(int i=0;i<n;i++)
{
int x;
cin>>x;
b.push_back(x);
}
int ans=b[0];
for(int i=1;i<n;i++)
{
//
if(ans+b[i]>=b[i])
{
ans+=b[i];
if(a.size()!=0)
{
if(ans>a[a.size()-1])
{
a.pop_back();
a.push_back(ans);
}
}
else a.push_back(ans);
}
else
{
ans=b[i];
a.push_back(ans);
}
}
//a.push_back(ans);
sort(a.begin(),a.end());
cout<<a[a.size()-1];
}
- 第一个数为一个有效序列
- 如果一个数加上上一个有效序列得到的结果比这个数大,那么该数也属于这个有效序列。
- 如果一个数加上上一个有效序列得到的结果比这个数小,那么这个数单独成为一个新的有效序列
- 在执行上述处理的过程中实时更新当前有效序列的所有元素之和并取最大值。