#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; int main() { ios::sync_with_stdio(false); int n; cin >> n; vector nums(n); for (int i = 0; i < n; i++) { cin >> nums[i]; } vector sum(n); sum[0] = nums[0]; int64_t maxSum = sum[0]; for (int i = 1; i < n; i++) { if (nums[i] > sum[i - 1] + nums[i]) { sum[i] = nums[i]; } else { sum[i] = sum[i - 1] + nums[i]; } maxSum = max(maxSum, sum[i]); } int endIdx = n - 1, startIdx = 0; for (int i = n - 1; i >= 0; i--) { if (sum[i] == maxSum) { endIdx = i; for (int j = endIdx; j >= 0; j--) { if (nums[j] == sum[j]) { startIdx = j; break; } } break; } } vector dp(endIdx - startIdx + 1); dp[endIdx - startIdx] = nums[endIdx]; for (int i = endIdx - 1; i >= startIdx; i--) { dp[i - startIdx] += dp[i - startIdx + 1] + nums[i]; } int64_t res = 0; for (int i = startIdx; i < endIdx; i++) { res += nums[i] * dp[i - startIdx + 1]; } cout << res << endl; return 0; }