C - つらら
indexを付けて,最初のつららの高さでsortする.sortされたつららの配列から高い順に折れる時間を決定していく.
n, l = map(int, input().split()) turara = [[int(input()), i] for i in range(n)] turara_s = sorted(turara, reverse = True) time = [0] * n for i in range(n): index = turara_s[i][1] if index == 0: #一番左のつらら if turara_s[i][0] > turara[1][0]: time[0] = l - turara_s[i][0] else: time[0] = time[1] + l - turara_s[i][0] elif index == n - 1: #一番右のつらら if turara_s[i][0] > turara[-2][0]: time[-1] = l - turara_s[i][0] else: time[-1] = time[-2] + l - turara_s[i][0] else: if turara_s[i][0] > turara[index + 1][0] and turara_s[i][0] > turara[index - 1][0]: #左右より長い time[index] = l - turara_s[i][0] elif turara_s[i][0] > turara[index + 1][0] and turara_s[i][0] < turara[index - 1][0]: #左 > つらら > 右 time[index] = time[index - 1] + l - turara_s[i][0] elif turara_s[i][0] < turara[index + 1][0] and turara_s[i][0] > turara[index - 1][0]: #左 < つらら < 右 time[index] = time[index + 1] + l - turara_s[i][0] elif turara_s[i][0] < turara[index + 1][0] and turara_s[i][0] < turara[index - 1][0]: #左 > つらら < 右 time[index] = max(time[index - 1], time[index + 1]) + l - turara_s[i][0] print(max(time))