1 /*
2 最大连续上升子序列和
3 */
4 #include<stdio.h>
5 #include<string.h>
6 #include<stdlib.h>
7 #include<algorithm>
8 #include<iostream>
9 #include<queue>
10 //#include<map>
11 #include<math.h>
12 using namespace std;
13 typedef long long ll;
14 //typedef __int64 int64;
15 const int maxn = 100005;
16 const int inf = 0x7fffffff;
17 const double pi=acos(-1.0);
18 const double eps = 1e-8;
19 int a[ maxn ];
20 int pos_s,pos_t,max_sum;
21
22 void LIS( int a[],int n ){
23 int tmp_pos,tmp_sum ;
24 pos_s = pos_t = tmp_pos = 1;
25 max_sum = tmp_sum = a[ 1 ];
26 for( int i=2;i<=n;i++ ){
27 if( tmp_sum+a[ i ]<a[ i ] ){
28 tmp_sum = a[ i ];
29 tmp_pos = i;
30 }
31 else{
32 tmp_sum += a[ i ];
33 }//当前 tmp_sum 的值就表示前面所有的最大的值的那个,且一定包含a[i-1]
34 if( tmp_sum>max_sum ){
35 max_sum = tmp_sum;
36 pos_s = tmp_pos;
37 pos_t = i;
38 }//从1到n扫描 暗示 着 pos_s最小,如果存在多个ans的话
39 }
40 }
41
42 int main(){
43 int ca;
44 scanf("%d",&ca);
45 for( int t=1;t<=ca;t++ ){
46 if( t!=1 ) printf("\n");
47 int n;
48 scanf("%d",&n);
49 for( int i=1;i<=n;i++ )
50 scanf("%d",&a[ i ]);
51 LIS( a,n );
52 printf("Case %d:\n%d %d %d\n",t,max_sum,pos_s,pos_t);
53 }
54 return 0;
55 }