Mishka and the Last Exam (Codeforces 1093C)
Tags: Greedy, greedy

Mishka is trying really hard to avoid being kicked out of the university. In particular, he was doing absolutely nothing for the whole semester, miraculously passed some exams so that just one is left.There were $$$n$$$ classes of that subject during the semester and on $$$i$$$-th class professor mentioned some non-negative integer $$$a_i$$$ to the students. It turned out, the exam was to tell the whole sequence back to the professor. Sounds easy enough for those who attended every class, doesn't it?Obviously Mishka didn't attend any classes. However, professor left some clues on the values of $$$a$$$ to help out students like Mishka:   $$$a$$$ was sorted in non-decreasing order ($$$a_1 \le a_2 \le \dots \le a_n$$$);  $$$n$$$ was even;  the following sequence $$$b$$$, consisting of $$$\frac n 2$$$ elements, was formed and given out to students: $$$b_i = a_i + a_{n - i + 1}$$$. Professor also mentioned that any sequence $$$a$$$, which produces sequence $$$b$$$ with the presented technique, will be acceptable.Help Mishka to pass that last exam. Restore any sorted sequence $$$a$$$ of non-negative integers, which produces sequence $$$b$$$ with the presented technique. It is guaranteed that there exists at least one correct sequence $$$a$$$, which produces the given sequence $$$b$$$.

Input: The first line contains a single integer $$$n$$$ ($$$2 \le n \le 2 \cdot 10^5$$$) — the length of sequence $$$a$$$. $$$n$$$ is always even.The second line contains $$$\frac n 2$$$ integers $$$b_1, b_2, \dots, b_{\frac n 2}$$$ ($$$0 \le b_i \le 10^{18}$$$) — sequence $$$b$$$, where $$$b_i = a_i + a_{n - i + 1}$$$.It is guaranteed that there exists at least one correct sequence $$$a$$$, which produces the given sequence $$$b$$$.

Output: Print $$$n$$$ integers $$$a_1, a_2, \dots, a_n$$$ ($$$0 \le a_i \le 10^{18}$$$) in a single line.$$$a_1 \le a_2 \le \dots \le a_n$$$ should be satisfied.$$$b_i = a_i + a_{n - i + 1}$$$ should be satisfied for all valid $$$i$$$.


Sample Inputs:
4
5 6

6
2 1 2

Sample Outputs:
2 3 3 3

0 0 1 1 1 2

Solution (Python):
""""""

def solve():
    rd = lambda : list(map(int, input().split()))
    n = int(input())
    arr = rd()
    ret = [0] * n
    for (i, val) in enumerate(arr):
        if i == 0:
            ret[i] = 0
            ret[n - i - 1] = val
        elif val >= arr[i - 1]:
            ret[n - i - 1] = ret[n - i]
            ret[i] = val - ret[n - i]
        else:
            ret[i] = ret[i - 1]
            ret[n - i - 1] = val - ret[i]
    ret = list(map(str, ret))
    print(' '.join(ret))
solve()

Solution (Python):
def main():
    n = int(input())
    b = list(map(int, input().split()))
    arr = [0] * n
    (l, r) = (0, b[0])
    for i in range(n // 2):
        newl = max(l, b[i] - r)
        newr = b[i] - newl
        (l, r) = (newl, newr)
        (arr[i], arr[n - i - 1]) = (l, r)
    print(' '.join(map(str, arr)))
if __name__ == '__main__':
    main()

Solution (Python):
n = int(input())
B = list(map(int, input().split()))
rec = [0] * n
(left, right) = (0, 10 ** 18 + 1)
for i in range(n // 2):
    b = B[i]
    (b1, b2) = (left, b - left)
    if b2 > right:
        b1 += b2 - right
        b2 = b - b1
    rec[i] = b1
    rec[n - i - 1] = b2
    (left, right) = (b1, b2)
print(' '.join(map(str, rec)))