//解 1:
#include<stdio.h>
int main(){
int t,cas,fir,end,i,n,max,sum,a[100000],j;
scanf("%d",&t);cas=1;
while(t--){
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
max=-999999;sum=-1;fir=end=1;
for(i=0;i<n;i++){
if(sum<0){ //取得最大值的数列开头不可能是负的(所以跳过它重新开始)
j=i;
sum=a[i];
}
else{
sum+=a[i]; //累加(肯定出现过要求的最大值)
}
if(sum>max){ //每次更新值(同时记录下要求的值)
max=sum;
fir=j+1; //开头为记录的下标
end=i+1; //结尾为当前下标
}
}
printf("Case %d:\n",cas++);
printf("%d %d %d\n",max,fir,end);
if(t) printf("\n");
}
return 0;
}
//解 2:
#include<iostream>
#include<cstring>
#include<cstdio>
const int N=100010;
using namespace std;
int d[N],a1[N];
int main()
{
int t,n,Max,a,b,i,j,m;
scanf("%d",&t);
for(j=1;j<=t;j++)
{
scanf("%d",&n);
for(i=1;i<=n;i++) scanf("%d",&a1[i]);
d[1]=a1[1];
Max=d[1];
b=1;
for(i=2;i<=n;i++)
{
if(d[i-1]<0) d[i]=a1[i];
else d[i]=d[i-1]+a1[i];
if(Max<d[i])
{
Max=d[i];
b=i;
}
}
int f=0;
for(i=b;i>0;i--)
{
f+=a1[i];
if(f==Max) a=i;
}
printf("Case %d:\n",j);
if(j!=t) printf("%d %d %d\n\n",Max,a,b);
else printf("%d %d %d\n",Max,a,b);
}
return 0;
}
//解 3:
#include<cstdio>
using namespace std;
int main()
{
int t,sum,max;
int data,start,End;
int a, b, A,B,n;
scanf("%d",&t);
for(int i = 1; i <= t; i++)
{
sum = max = -10001;
scanf("%d",&n);
for(int j = 1; j <=n; j++)
{
scanf("%d",&data);
if(sum + data < data)
{
sum = data;
a = b = j;
}
else
{
sum += data;
++b;
}
if(max<sum)
{
max = sum; A = a;
B = b;
}
}
printf("Case %d:\n%d %d %d\n",i,max,A,B);
if(i != t) printf("\n");
}
return 0;
}