#include<iostream>
using namespace std;
int max(int a,int b,int c)
{
return a>b?(a>c?a:c):(b>c?b:c);
}
void f(int *low,int len,int max0)
{
int i,j,x=0,y=0,t=0,sum1=0,sum2=0,max1=0,max2=0,max3=0;
if(len%2) t=1;
for(i=len/2-1;i>=0;i--)
{
sum1+=low[i];
if(sum1>max1)
{
max1=sum1;
x=i;
}
}
for(j=0;j<len/2+t;j++)
{
sum2+=low[j+len/2];
if(sum2>max2)
{
max2=sum2;
y=j;
}
}
max3=max1+max2;
if(max0>max(max1,max2,max3))
return;
cout<<"最大子数组的区间为("<<x<<","<<x+y+1<<")"<<endl;
cout<<"最大和为"<<max(max1,max2,max3)<<endl;
if(max(max1,max2,max3)==max1)
f(low+x,len/2-x,max1);
else if(max(max1,max2,max3)==max2)
f(low+len/2,y,max2);
else if(max(max1,max2,max3)==max3)
f(low+x,len/2-x+y,max3);
}
void Maxarray(int *low,int len)
{
f(low,len,0);
}
int main()
{
int a[]={13,-3,-25,20,-3,-16,-23,18,20,-7,12,-5,-22,15,-4,7};
Maxarray(a,16);
}