介绍:
https://www.cnblogs.com/frankchenfu/p/7107019.html
应用
pythonimport bisect
def max_order(lists):
list_num = []
list_max = []
for i in lists:
# bisect_left把i插入list_num,使得list_num还是升序,返回index。insort才是就地插入
local = bisect.bisect_left(list_num, i)
if local == len(list_num): # 最后一个
list_num.append(i) # 最大值放最后
list_max.append(local + 1) # 记录每个元素插在哪个位置了
else:
list_num[local] = i # 不是最大就替换,给后面更多机会
list_max.append(local + 1) # 记录每个元素插在哪个位置了
return list_max
while True:
try:
people_num = int(input())
height_list = list(map(int, input().split()))
result_1 = max_order(height_list) # 升序最长
result_2 = max_order(height_list[::-1])[::-1] # 降序最长
print(people_num - max(map(sum, zip(result_1, result_2))) + 1)
except BaseException as er:
# print("fault line is", er.__traceback__.tb_lineno)
break
输入
8
186 186 150 200 160 130 197 200
最后
result_1
[1, 1, 1, 2, 2, 1, 3, 4]
result_2
[3, 3, 2, 3, 2, 1, 1, 1]
所以要出队这么多人:
4
本文作者:Dong
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!