#include<bits/stdc++.h>
using namespace std;
int crossmaxsum(vector<int>&nums,int left,int mid,int right,int &start,int &end)
{
int maxleftsum=-100,maxrightsum=-100;
int leftsum=0,rightsum=0;
int leftidx=mid;
int tempstart=mid;
for(int i=mid;i>=left;i--)
{
leftsum=leftsum+nums[i];
if(leftsum>maxleftsum)
{
maxleftsum=leftsum;
tempstart=i;
}
}
int rightidx=mid+1;
int tempend=mid+1;
for(int i=mid+1;i<=right;i++)
{
rightsum=rightsum+nums[i];
if(rightsum>maxrightsum)
{
maxrightsum=rightsum;
tempend=i;
}
}
start=tempstart;
end=tempend;
return maxleftsum+maxrightsum;
}
int Maxsubarraysum(vector<int>&nums,int left,int right,int &start,int &end)
{
if(left==right)
{
start=end=left;
return nums[left];
}
int mid=(right+left)/2;
int leftstart,leftend,rightstart,rightend,crossstart,crossend;
int leftpart=Maxsubarraysum(nums,left,mid,leftstart,leftend);
int rightpart=Maxsubarraysum(nums,mid+1,right,rightstart,rightend);
int Crossingmaxsum=crossmaxsum(nums,left,mid,right,crossstart,crossend);
if(leftpart>=rightpart&& leftpart>=Crossingmaxsum)
{
start=leftpart;
end=leftend;
return crossstart;
}
if(rightpart>=leftpart&& rightpart>=Crossingmaxsum)
{
start=rightpart;
end=rightend;
return crossend;
}
else
{
start=crossstart;
end=crossend;
return Crossingmaxsum;
}
}
int main()
{
int n;
cin>>n;
vector<int>nums;
for(int i=0;i<n;i++)
{
int x;
cin>>x;
nums.push_back(x);
}
int start=0,end=0;
int maxsubarraysum=Maxsubarraysum(nums,0,n-1,start,end);
cout<<maxsubarraysum<<endl;
for(int i=start;i<=end;i++)
{
cout<<nums[i]<<" ";
cout<<endl;
}
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKaW50IGNyb3NzbWF4c3VtKHZlY3RvcjxpbnQ+Jm51bXMsaW50IGxlZnQsaW50IG1pZCxpbnQgcmlnaHQsaW50ICZzdGFydCxpbnQgJmVuZCkKewppbnQgbWF4bGVmdHN1bT0tMTAwLG1heHJpZ2h0c3VtPS0xMDA7CmludCBsZWZ0c3VtPTAscmlnaHRzdW09MDsKaW50IGxlZnRpZHg9bWlkOwppbnQgdGVtcHN0YXJ0PW1pZDsKZm9yKGludCBpPW1pZDtpPj1sZWZ0O2ktLSkKewpsZWZ0c3VtPWxlZnRzdW0rbnVtc1tpXTsKaWYobGVmdHN1bT5tYXhsZWZ0c3VtKQp7Cm1heGxlZnRzdW09bGVmdHN1bTsKdGVtcHN0YXJ0PWk7Cn0KfQppbnQgcmlnaHRpZHg9bWlkKzE7CmludCB0ZW1wZW5kPW1pZCsxOwpmb3IoaW50IGk9bWlkKzE7aTw9cmlnaHQ7aSsrKQp7CnJpZ2h0c3VtPXJpZ2h0c3VtK251bXNbaV07CmlmKHJpZ2h0c3VtPm1heHJpZ2h0c3VtKQp7Cm1heHJpZ2h0c3VtPXJpZ2h0c3VtOwp0ZW1wZW5kPWk7Cn0KfQpzdGFydD10ZW1wc3RhcnQ7CmVuZD10ZW1wZW5kOwpyZXR1cm4gbWF4bGVmdHN1bSttYXhyaWdodHN1bTsKfQoKaW50IE1heHN1YmFycmF5c3VtKHZlY3RvcjxpbnQ+Jm51bXMsaW50IGxlZnQsaW50IHJpZ2h0LGludCAmc3RhcnQsaW50ICZlbmQpCnsKaWYobGVmdD09cmlnaHQpCnsKc3RhcnQ9ZW5kPWxlZnQ7CnJldHVybiBudW1zW2xlZnRdOwp9CmludCBtaWQ9KHJpZ2h0K2xlZnQpLzI7CmludCBsZWZ0c3RhcnQsbGVmdGVuZCxyaWdodHN0YXJ0LHJpZ2h0ZW5kLGNyb3Nzc3RhcnQsY3Jvc3NlbmQ7CmludCBsZWZ0cGFydD1NYXhzdWJhcnJheXN1bShudW1zLGxlZnQsbWlkLGxlZnRzdGFydCxsZWZ0ZW5kKTsKaW50IHJpZ2h0cGFydD1NYXhzdWJhcnJheXN1bShudW1zLG1pZCsxLHJpZ2h0LHJpZ2h0c3RhcnQscmlnaHRlbmQpOwppbnQgQ3Jvc3NpbmdtYXhzdW09Y3Jvc3NtYXhzdW0obnVtcyxsZWZ0LG1pZCxyaWdodCxjcm9zc3N0YXJ0LGNyb3NzZW5kKTsKaWYobGVmdHBhcnQ+PXJpZ2h0cGFydCYmIGxlZnRwYXJ0Pj1Dcm9zc2luZ21heHN1bSkKewpzdGFydD1sZWZ0cGFydDsKZW5kPWxlZnRlbmQ7CnJldHVybiBjcm9zc3N0YXJ0Owp9CmlmKHJpZ2h0cGFydD49bGVmdHBhcnQmJiByaWdodHBhcnQ+PUNyb3NzaW5nbWF4c3VtKQp7CnN0YXJ0PXJpZ2h0cGFydDsKZW5kPXJpZ2h0ZW5kOwpyZXR1cm4gY3Jvc3NlbmQ7Cn0KZWxzZQp7CnN0YXJ0PWNyb3Nzc3RhcnQ7CmVuZD1jcm9zc2VuZDsKcmV0dXJuIENyb3NzaW5nbWF4c3VtOwp9Cn0KaW50IG1haW4oKQp7CmludCBuOwpjaW4+Pm47CnZlY3RvcjxpbnQ+bnVtczsKZm9yKGludCBpPTA7aTxuO2krKykKewppbnQgeDsKY2luPj54OwpudW1zLnB1c2hfYmFjayh4KTsKfQppbnQgc3RhcnQ9MCxlbmQ9MDsKaW50IG1heHN1YmFycmF5c3VtPU1heHN1YmFycmF5c3VtKG51bXMsMCxuLTEsc3RhcnQsZW5kKTsKY291dDw8bWF4c3ViYXJyYXlzdW08PGVuZGw7CmZvcihpbnQgaT1zdGFydDtpPD1lbmQ7aSsrKQp7CmNvdXQ8PG51bXNbaV08PCIgIjsKY291dDw8ZW5kbDsKfQp9