答案与解析
import bisect
# 引入二分法
def nt(l):
# 定义列表,将传入函数的列表第一个元素放入当前元素
arr = [l[0]]
#定义一个列表,默认子序列有当前元素1,长度是传入函数的列表长度
dp = [1]*len(l)
for i in range(1,len(l)):
if l[i] > arr[-1]:
arr.append(l[i])
dp[i] = len(arr)
# 否则,利用二分法找到比元素大的元素的位置,
# 用新的元素替代比它大的那个元素的值,
# 这样就能制造出一个顺序排列的子序列
else:
pos = bisect.bisect_left(arr,l[i])
arr[pos] = l[i]
dp[i] = pos+1
return dp
while True:
try:
res = []
n = int(input())
heights =list(map(int,input().split()))
l = nt(heights)
r = nt(heights[::-1])[::-1]
for j in range(len(heights)):
res.append(l[j]+r[j]-1)
print(n-max(res))
except:
break