def solve(n, nums):
full_rot = nums + nums
bigger = [2 * n] * (2 * n)
stack = []
for i in range(n * 2):
while stack and full_rot[stack[-1]] < full_rot[i]:
bigger[stack.pop()] = i
stack.append(i)
counter = [0] * (2 * n + 1)
for i in range(2 * n - 1, -1, -1):
next = bigger[i]
if next < i + n:
counter[i] = 1 + counter[next]
else:
counter[i] = 1
return max(counter[:n])
n = int(input())
nums = list(map(int, input().split()))
print(solve(n, nums))
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | def solve(n, nums): full_rot = nums + nums bigger = [2 * n] * (2 * n) stack = [] for i in range(n * 2): while stack and full_rot[stack[-1]] < full_rot[i]: bigger[stack.pop()] = i stack.append(i) counter = [0] * (2 * n + 1) for i in range(2 * n - 1, -1, -1): next = bigger[i] if next < i + n: counter[i] = 1 + counter[next] else: counter[i] = 1 return max(counter[:n]) n = int(input()) nums = list(map(int, input().split())) print(solve(n, nums)) |
English