int maxsubsum(int *a,int left,int right){
int maxsum;
if(left==right){
maxsum=a[left]>0?a[left]:0;
}
else{
int mid;
mid=(left+right)/2;
int i,j;
int leftsum=maxsubsum(a,left,mid);
int rightsum=maxsubsum(b,mid+1;right);
int maxlefts=0,maxrights=0;
int lefts=0,rights=0;
for(i=mid;i>=left;i--){
lefts=lefts+a[i];
if(lefts>maxleft){
maxlefts=lefts;
}
}
for(j=mid+1;j<right;j++){
rights=rights+a[j];
if(rights>maxrights){
maxrights=rights;
}
}
maxsum=maxlefts+maxrights;
if(maxsum<leftsum) maxsum=leftsmax;
if(maxsum<rightsum) maxsum=rightsmax;
}
return maxsum;
}