Прохожу курс по алгоритмам на stepic.org
Застряла на задаче по поиску наибольшей невозрастающей подпоследовательности за время n log n (см.картинку)
Мое решение проходит все тесты, кроме последнего, 20-го, выдавая ошибку Failed test #20 of 20. Time limit exceeded - понятно, что не прохожу по времени, но уже неделю пытаюсь понять почему. И, как назло, никто в комментариях именно с такой проблемой не сталкивался, поэтому прошу помощи здесь.
Заранее прошу прощения, если вопрос глупый, я еще только учусь и, к сожалению, знакомых программистов, к которым могу обратиться с вопросами, у меня нет(
Описание алгоритма для поиска наибольшей возрастающей подпоследовательности за время n log n с использованием бинарного поиска есть тут:
https://en.wikipedia.org/wiki/Longest_increasing_s...
я оптимизировала данный алгоритм, чтобы он выстраивал не строго возрастающую подпоследовательность, а неубывающую и использовала его для "перевернутого" входного массива, на всех тестах работает верно.. возможно, скорость теряется где-то в другом: например, при выводе результата или создании списков.
Вот мой код:
n = int(input())
x = list(map(int, input().split()))
x.reverse()
p = [0]*n
m = [0]*(n+1)
l = 0
for i in range(n):
left = 1
right = l
while left <= right:
mid = (left+right) // 2
if x[m[mid]] < x[i]:
left = mid+1
elif x[m[mid]] == x[i]:
left += 1
else:
right = mid-1
new_l = left
p[i] = m[new_l-1]
if new_l > l:
m[new_l] = i
l = new_l
elif x[i] < x[m[new_l]]:
m[new_l] = i
print(l)
k = m[l]
for i in range(l-1,-1,-1):
print (n-k, end = ' ')
k = p[k]
UPD. Спасибо всем большое за советы и помощь! Ошибку нашла и исправила, решение приняли, ура!