Мини-урок · перед практикой

Шеренга

Петя встаёт после всех, чей рост не меньше его роста.

Как к ней подойти

Потренируйтесь хранить последовательность значений и обращаться к нужным элементам списка.

Коротко о теме

Список хранит элементы в определённом порядке. Прежде чем менять его, решите, нужны ли исходные индексы и можно ли пройти по данным один раз. При удалении элементов будьте внимательны: индексы сдвигаются.

Ключевая идея · Линейный проход

Первый меньший рост задаёт место вставки; нумерация мест начинается с единицы.

Проверьте перед запуском

  • Равный рост нужно пропускать вместе с большими значениями.

Сравните свой подход

Ниже - готовое решение, другой способ, если он есть, и важные детали проверки.

Ваше принятое решение

Рекомендуемое решение: Линейный проход

Первый меньший рост задаёт место вставки; нумерация мест начинается с единицы.

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).