这个题看的时间超级长,主要是不太理解差分,也看不出来怎么联系到那里的
这个题解法很多,快考试了也就不研究那么多解法了,单研究个比较常考的差分法好啦
这里可以理解成找到一个水平线来上下分割
当p值足够大时,所有陆地都被海水淹没了,只有0个岛屿;p下降即海平面下降时,山峰逐渐凸显,每多一个岛屿露出水面,就多一个岛屿,没当一个凹谷出现,两边的岛屿相连就会少一个岛屿
n = int(input())
A = list(map(int,input().split()))+[0]
A = [0] + [A[i] for i in range(n) if A[i]!=A[i+1]]+[0]
max_line = max(A)
diff = [0] * ((max_line+1)*2) # 差分数组
for i in range(1,len(A)-1):
if A[i-1]<A[i] and A[i+1]<A[i]: # 山峰
diff[A[i]] += 1 # 海平面到这个位置的山峰
elif A[i-1]>A[i] and A[i+1]>A[i]: # 山谷
diff[A[i]] -= 1
max_diff = 0
for i in range(max_line,-1,-1):
diff[i] += diff[i+1]
max_diff = max(max_diff,diff[i])
print(max_diff)