#include<iostream>
using namespace std;
int max_sum1(int a[],int n){
int best=a[1];
for(int i=1;i<=n;i++){
for(int j=i;j<=n;j++){
int sum=0;
for(int k=i;k<=j;k++) sum+=a[k];
if(sum>best) best=sum;
}
}
return best;
}
int max_sum2(int a[],int n){
int best=a[1];
int *s=new int[n+1];
s[0]=0;
for(int i=1;i<=n;i++) s[i]=s[i-1]+a[i];
for(int i=1;i<=n;i++){
for(int j=i;j<=n;j++)
best=max(best,s[j]-s[i-1]);
}
delete[] s;
return best;
}
int max_sum3(int a[],int x,int y){
int v,l_sum,r_sum,best;
if(y-x==1) return a[x];
int mid=x+(y-x)/2;
best=max(max_sum3(a,x,mid),max_sum3(a,mid,y));
v=0;l_sum=a[mid-1];
for(int i=mid-1;i>=x;i--) l_sum=max(l_sum,v+=a[i]);
v=0;r_sum=a[mid];
for(int i=mid;i<y;i++) r_sum=max(r_sum,v+=a[i]);
return max(best,l_sum+r_sum);
}
int max_sum4(int a[],int n){
int best=a[1],cur_sum=0;
for(int i=1;i<=n;i++){
if(cur_sum<=0) cur_sum=a[i];
else cur_sum+=a[i];
best=max(best,cur_sum);
}
return best;
}
int main()
{
int a[7]={0,3,4,-6,4,5,-2};
cout<<max_sum1(a,6)<<endl;
cout<<max_sum2(a,6)<<endl;
cout<<max_sum3(a,1,6)<<endl;
cout<<max_sum4(a,6)<<endl;
return 0;
}