Another Array Problem (Codeforces 1763C)
Tags: Greedy, brute force

You are given an array $$$a$$$ of $$$n$$$ integers. You are allowed to perform the following operation on it as many times as you want (0 or more times):   Choose $$$2$$$ indices $$$i$$$,$$$j$$$ where $$$1 \le i < j \le n$$$ and replace $$$a_k$$$ for all $$$i \leq k \leq j$$$ with $$$|a_i - a_j|$$$ Print the maximum sum of all the elements of the final array that you can obtain in such a way.

Input: The first line contains a single integer $$$t$$$ ($$$1 \le t \le 10^5$$$) — the number of test cases.The first line of each test case contains a single integer $$$n$$$ ($$$2 \le n \le 2 \cdot 10^5$$$) — the length of the array $$$a$$$.The second line of each test case contains $$$n$$$ integers $$$a_1, a_2, \ldots, a_n$$$ ($$$1 \le a_i \le 10^9$$$) — the elements of array $$$a$$$.It's guaranteed that the sum of $$$n$$$ over all test cases does not exceed $$$2 \cdot 10^5$$$.

Output: For each test case, print the sum of the final array.

Note: In the first test case, it is not possible to achieve a sum $$$> 3$$$ by using these operations, therefore the maximum sum is $$$3$$$.In the second test case, it can be shown that the maximum sum achievable is $$$16$$$. By using operation $$$(1,2)$$$ we transform the array from $$$[9,1]$$$ into $$$[8,8]$$$, thus the sum of the final array is $$$16$$$. In the third test case, it can be shown that it is not possible to achieve a sum $$$> 18$$$ by using these operations, therefore the maximum sum is $$$18$$$.

Sample Inputs:
3
3
1 1 1
2
9 1
3
4 9 5

Sample Outputs:
3
16
18

Solution (Python):
import sys
input = sys.stdin.readline

def readList():
    return list(map(int, input().split()))

def readInt():
    return int(input())

def readInts():
    return map(int, input().split())

def readStr():
    return input().strip()

def solve():
    n = readInt()
    arr = readList()
    V = max(arr)
    if n > 3:
        return n * V
    elif n == 2:
        return max(sum(arr), abs(arr[0] - arr[1]) * 2)
    else:
        return max(sum(arr), 3 * arr[0], 3 * arr[-1], 3 * abs(arr[0] - arr[1]), 3 * abs(arr[1] - arr[-1]))
for _ in range(int(input())):
    print(solve())

Solution (Python):
t = int(input())
for test in range(t):
    n = int(input())
    a = list(map(int, input().split()))
    if n == 2:
        print(max(sum(a), 2 * abs(a[0] - a[1])))
    elif n == 3:
        if a[0] == a[1] == a[2]:
            print(a[0] * 3)
        elif a[0] == max(a) or a[-1] == max(a):
            print(max(a) * 3)
        else:
            x = sum(a)
            y = (a[1] - min(a[0], a[-1])) * 3
            print(max(x, y, max(a[0], a[-1]) * 3))
    else:
        print(max(a) * n)

Solution (Python):
T = int(input())
for _ in range(T):
    n = int(input())
    a = list(map(int, input().split()))
    if n == 1:
        print(a[0])
    elif n == 2:
        print(max(2 * abs(a[0] - a[1]), a[0] + a[1]))
    elif n == 3:
        print(max(3 * abs(a[0] - a[1]), 3 * abs(a[2] - a[1]), 3 * a[0], 3 * a[2], a[0] + a[1] + a[2]))
    else:
        print(max(a) * n)