#include #include #include #include #include #include #include long int largestValue(int A_size, int* A) { // Return the largest value of any of A's nonempty subarrays. long int sum = 0; long int sumSq = 0; for (int i=0; i= val) { //printf("Removing front %d\n", A[front]); sum -= A[front]; front++; val = newVal; newVal = val - (sum-A[front])*A[front]; } //printf("Val after front %ld\n", val); // Trim the back if that improves int back = A_size-1; newVal = val - (sum-A[back])*A[back]; while (newVal >= val) { //printf("Removing back %d\n", A[back]); sum -= A[back]; back--; val = newVal; newVal = val - (sum-A[back])*A[back]; } //printf("Val after back %ld\n", val); return val; } 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; }