#include #include #include #include #include #include #include int start=0,end=0; void maxSm(int a[], int size) { int max_so_far = INT_MIN, max_ending_here = 0, s=0; for (int i=0; i< size; i++ ) { max_ending_here += a[i]; if (max_so_far < max_ending_here) { max_so_far = max_ending_here; start = s; end = i; } if (max_ending_here < 0) { max_ending_here = 0; s = i + 1; } } } long int largestValue(int n, int* a) { // Return the largest value of any of A's nonempty subarrays. long long i,j,s=0; for(i=start;i<=end;i++) { for(j=i+1;j<=end;j++) s+=(a[i]*a[j]); } return s; } int main() { int n; scanf("%i", &n); int *A = malloc(sizeof(int) * n); for (int A_i = 0; A_i < n; A_i++) { scanf("%i",&A[A_i]); } maxSm(A,n); long int result = largestValue(n, A); printf("%ld\n", result); return 0; }