#include #include #include #include #include #include #include int l,r; int maxSubArraySum(int a[], int size) { int max_so_far = INT_MIN, max_ending_here = 0; for (int i = 0; i < size; i++) { max_ending_here = max_ending_here + a[i]; if (max_so_far < max_ending_here) {max_so_far = max_ending_here; r=i; } if (max_ending_here < 0) { max_ending_here = 0; l=i+1; } } // printf("%d %d\n",l,r); // printf("%d\n", max_so_far); return max_so_far; } long int largestValue(int A_size, int* A) { maxSubArraySum(A,A_size); long long int prod=0; for(int i=l;i<=r;i++) { for(int j=i+1;j<=r;j++) { // printf("%d ",A[i]*A[j]); prod+=A[i]*A[j]; } } return prod; // Return the largest value of any of A's nonempty subarrays. } 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]); } long int result = largestValue(n, A); printf("%ld\n", result); return 0; }