merge 函数计算前后缀最大值时只需要取最大值即可:
inline node merge(node&s,node x,node y){
s.pre=max(x.sum+y.pre,x.pre),s.suf=max(y.sum+x.suf,y.suf);
s.res=max(x.suf+y.pre,max(x.res,y.res)),s.sum=x.sum+y.sum;
return s;
}
而不是:
inline node merge(node&s,node x,node y){
s.pre=x.sum==x.pre?x.sum+y.pre:x.pre;
s.suf=y.sum==y.suf?y.sum+x.suf:y.suf;
s.res=max(x.suf+y.pre,max(x.res,y.res)),s.sum=x.sum+y.sum;
return s;
}