def maxzach(perly):
n = len(perly)
if n == 0:
return 0
podwojone = perly +perly
dlugosc = 2 *n
poprzedni = [-1] *dlugosc
stos = []
for i in range(dlugosc):
while stos and podwojone[stos[-1]] < podwojone[i]:
stos.pop()
if stos:
poprzedni[i] = stos[-1]
stos.append(i)
roznice = [0] *(n + 1)
for j in range(dlugosc):
lewy = max(poprzedni[j] + 1, j - n + 1)
prawy = min(j, n - 1)
if lewy <= prawy:
roznice[lewy] += 1
roznice[prawy + 1] -= 1
zachds = [0] * n
suma = 0
for i in range(n):
suma += roznice[i]
zachds[i] = suma
return max(zachds)
n = int(input())
print(maxzach(list(map(int, input().split()))))
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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | def maxzach(perly): n = len(perly) if n == 0: return 0 podwojone = perly +perly dlugosc = 2 *n poprzedni = [-1] *dlugosc stos = [] for i in range(dlugosc): while stos and podwojone[stos[-1]] < podwojone[i]: stos.pop() if stos: poprzedni[i] = stos[-1] stos.append(i) roznice = [0] *(n + 1) for j in range(dlugosc): lewy = max(poprzedni[j] + 1, j - n + 1) prawy = min(j, n - 1) if lewy <= prawy: roznice[lewy] += 1 roznice[prawy + 1] -= 1 zachds = [0] * n suma = 0 for i in range(n): suma += roznice[i] zachds[i] = suma return max(zachds) n = int(input()) print(maxzach(list(map(int, input().split())))) |
English