传送门#include<stdio.h>
#include<algorithm>
using namespace std;
int main(){
int k;
scanf("%d",&k);
int qw[10010];
int s[10010]={0};
int dp[10010];
bool flag=true;
for(int i=0;i<k;i++){
scanf("%d",&qw[i]);
if(qw[i]>=0) flag=false;}
if(flag){
printf("0 %d %d\n",qw[0],qw[k-1]);
return 0;}
dp[0]=qw[0];
for(int i=1;i<k;i++)
{
dp[i]=max(dp[i-1]+qw[i],qw[i]);
if(dp[i-1]+qw[i]>qw[i]) s[i]=s[i-1];
else s[i]=i;
}
int m=dp[0],z=0;
for(int i=1;i<k;i++)
{if(dp[i]>m) {
m=dp[i],z=i;
}
}
printf("%d %d %d\n",m,qw[s[z]],qw[z]);
return 0;}
#include<algorithm>
using namespace std;
int main(){
int k;
scanf("%d",&k);
int qw[10010];
int s[10010]={0};
int dp[10010];
bool flag=true;
for(int i=0;i<k;i++){
scanf("%d",&qw[i]);
if(qw[i]>=0) flag=false;}
if(flag){
printf("0 %d %d\n",qw[0],qw[k-1]);
return 0;}
dp[0]=qw[0];
for(int i=1;i<k;i++)
{
dp[i]=max(dp[i-1]+qw[i],qw[i]);
if(dp[i-1]+qw[i]>qw[i]) s[i]=s[i-1];
else s[i]=i;
}
int m=dp[0],z=0;
for(int i=1;i<k;i++)
{if(dp[i]>m) {
m=dp[i],z=i;
}
}
printf("%d %d %d\n",m,qw[s[z]],qw[z]);
return 0;}