最大子序列和
在线处理法
稍加修改, 记录最大和的位置
1 #include<iostream> 2 using namespace std; 3 4 int K; 5 int d[100006]; 6 int main() 7 { 8 cin>>K; 9 for(int i=0;i<K;i++) cin>>d[i]; 10 int ans_l=0,ans_r=K-1; 11 int l=0,r=K-1; 12 long long now=0,maxx=-1; 13 for(int i=0;i<K;i++) 14 { 15 now+=d[i]; 16 if(now>maxx) 17 { 18 maxx=now; 19 r=i; 20 ans_l=l; 21 ans_r=r; 22 } 23 else if(now<0) 24 { 25 now=0; 26 l=i+1; 27 } 28 } 29 if(maxx<0) maxx=0; 30 cout<<maxx<<" "<<d[ans_l]<<" "<<d[ans_r]<<endl; 31 return 0; 32 }