#include #include #include #include #include #include #include int sgn(int x) { if (x < 0) return -1; if (x > 0) return 1; return 0; } int max(int x, int y) { return x > y ? x : y; } long int largestValue(int A_size, int* A) { // Return the largest value of any of A's nonempty subarrays. // The maximum value will either come from ALL negative numbers or ALL positive int lastSum = 0; int currentSum = 0; int i, j; for(i=0; i < A_size; i++) { for(j = i+1; j < A_size; j++) { if(sgn(A[i]) * sgn(A[j]) >= 0 ) { currentSum += A[i] * A[j]; /*printf("%d %d %d %d\n", A[i], A[j], A[i] * A[j], currentSum);*/ } else { lastSum = max(currentSum,lastSum); currentSum = 0; } } } return max(lastSum, currentSum); } 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; }