Шеренга
Вы решили задачу. Теперь можно сравнить подходы.
Петя встаёт после всех, чей рост не меньше его роста.
Авторский разбор для локальной версии на основе условия задачи. Это не выгрузка чужих посылок и не официальное решение исходного сайта.
Ваше принятое решение
Рекомендуемое решение: Линейный проход
Первый меньший рост задаёт место вставки; нумерация мест начинается с единицы.
a = list(map(int, input().split()))
x = int(input())
i = 0
while i < len(a) and a[i] >= x:
i += 1
print(i + 1)
Время: O(n). Память: O(n) с учётом списка.
Другой способ: Двоичный поиск
Невозрастающий порядок позволяет найти границу двоичным поиском; чтение списка всё равно линейное.
a = list(map(int, input().split()))
x = int(input())
lo, hi = 0, len(a)
while lo < hi:
mid = (lo + hi) // 2
if a[mid] >= x:
lo = mid + 1
else:
hi = mid
print(lo + 1)
Время: O(n) всего, O(log n) поиск. Память: O(n).
На что обратить внимание
- Равный рост нужно пропускать вместе с большими значениями.
Рекомендация учитывает сложность и читаемость для этой задачи. Единственного самого быстрого решения для всех размеров входа и всех компьютеров может не быть.