Квадратный апгрейд

тема: Двоичный поиск · уровень: базовый

Условие

В игре есть апгрейд «Квадратный щит». Если у тебя есть x кристаллов, то можно поставить щит уровня k, только если хватает на квадрат: нужно k² ≤ x кристаллов.

Помоги выбрать максимальный уровень щита.

Важно: x может быть очень большим (как на олимпиадах, больше 32-битного int).

Формат ввода

Одно целое число x.

Формат вывода

Выведите одно целое число k — максимальное, для которого k² ≤ x.

Ограничения

Пример

Ввод:

10

Вывод:

3

Как решать — идея подхода

Приём: Бинарный поиск по ответу

Ключевое наблюдение: условие k*k ≤ x монотонно по k. Если для некоторого k хватает кристаллов, то для всех меньших уровней тоже хватит. Значит, можно искать границу «хватает / не хватает» бинарным поиском.

Почему не просто int(sqrt(x))? При больших x и вещественных числах можно получить ошибку из‑за округления. Целочисленный бинарный поиск работает точно.

План:

Сложность: O(log r), здесь около 30 шагов.

Частая ошибка: брать середину как (l + r) // 2 и при обновлении l = m зациклиться, когда l+1 = r. Лечится формулой с +1 (середина вверх) или другим аккуратным вариантом обновления границ.

Решить задачу с автопроверкой на Python →

Куда дальше