第三题贴一个自己的思路,这是交卷后想到的,也不知道能否AC 思路:两个单调栈,先得到一个单调递减栈, 后得到一个单调递增栈,函数图像相当于一个V字形 步骤一:两个栈都不为空,则递增栈的最大,匹配递减栈的最小,循环直到一个栈为空 步骤二:递减栈为空,递增栈不为空,则递增栈最大值匹配最小值,循环操作直到栈空或者只剩一个元素,把这个元素接到递减栈后面去 import sys n = int(input()) num = list(map(int, sys.stdin.readline().strip().split())) s1 = [float("inf")] s2 = [float("-inf")] idx, res = 0, 0 while idx < n: while idx < n and num[idx] <= s1[-1]: s1.append(num[idx]) idx += 1 while idx < n and num[idx] >= s2[-1]: s2.append(num[idx]) idx += 1 while len(s1) > 1 and len(s2) > 1 and s2[-1] > s1[-1]: print(s2[-1], s1[-1]) res += s2[-1] - s1[-1] s2.pop() s1.pop() while len(s2) >= 3: res += s2[-1] - s2[1] s2.pop() s2.pop(1) s1 += s2[1:] s2 = [float("-inf")] print(res)