本种解法结合了华农oj数据结构拓展习题1的18927 前缀和 和 18770 差值最大两题的知识点
是集大成的复习首选(乐
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int a[200001];
int main(){
int n;scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
a[i]+=a[i-1];
}//处理前缀和 a[i]表示第1个数字到第i个数字的和。
//求最大子段和即为求(假设最大子段和区间为从j到i)a[i]-a[j-1]的最大值
int x,y=100001,ans=0;
for(int i=1;i<=n;i++){
x=a[i];
y=min(y,a[i-1]);
ans=max(ans,x-y);
}
//设a[i]为x,a[j-1]为y,求x-y的最大值,x永远在y的右侧,y为x右侧的最小值时x-y最大。
printf("%d",ans);
return 0;
}