使用了在线处理算法,测试结果完全正确。
#include <iostream>
using namespace std;
int MaxSubseqSum4(int *A,int N,int *B)
{
int MaxSum=0,ThisSum=0,i,num=0;
*(B+1)=*A;
*(B+2)=*(A+N-1);
for (i=0;i<N;i++) {
ThisSum += *(A + i);
num+=1;
if (ThisSum > MaxSum) {
MaxSum = ThisSum;
*(B+2)=*(A+i);
*(B+1)=*(A+i-num+1);
}
else if (ThisSum==0 && num==1)
{
*(B+2)=*(A+i);
*(B+1)=*(A+i-num+1);
}
else if (ThisSum < 0) {
ThisSum = 0;
num=0;
}
}
if (MaxSum<=0)
{
}
return MaxSum;
}
int main()
{
int N,i;
cin>>N;
int *A=new int[N];
int B[3];
for(i=0;i<N;i++)
{
cin>>*(A+i);
}
cout<<MaxSubseqSum4(A,N,B)<<" "<<*(B+1)<<" "<<*(B+2)<<endl;
delete [] A;
return 0;
}