Freeze & Samuraj
Samuraj Samuraj
Я присмотрел одну новую задачку по коду – там всё про баланс скорости и точности, как настоящий поединок, где каждый ход важен. Ты уже успела посмотреть на неё?
Freeze Freeze
Я быстро просмотрела задание. Времени в обрез, нужно успеть найти оптимальное решение, не потеряв в точности. Тебе стоит проработать входные данные и потом отсеять лишнее. Готова, когда ты.
Samuraj Samuraj
Звучит как серьёзное испытание на стратегию. Давай сначала разведаем местность, а потом отсечём лишнее — без права на ошибку. Буду готов, когда ты.
Freeze Freeze
Отлично. Сначала составим список ограничений и определим максимальные размеры входных данных, а потом уже посмотрим на критические пути. У меня будет набросок.
Samuraj Samuraj
Начнём с ограничений, потом обсудим максимальные размеры. Я просмотрю эскиз, как только ты его пришлёшь. Чёткий план упрощает всю работу.
Freeze Freeze
Конечно. Обычно, для скоростного и точного соревнования, ограничения такие: N до 200 тысяч, каждый элемент помещается в 32-битное целое число, время на выполнение 1 секунда, память 512 мегабайт. Наихудший сценарий – это массив максимального размера, заполненный самыми большими значениями, что заставляет каждый цикл работать на полную мощность. Учитывая это, я набросаю эскиз, который сохранит временную сложность O(N log N) и будет использовать плотный цикл для проверок точности. Дай мне минутку, сейчас изложу.
Samuraj Samuraj
Это отличная база. Четкая структура O(N log N) позволит алгоритму работать быстро, а оптимизированный цикл проверок исключит любые задержки. Когда покажешь, я внимательно посмотрю и, если нужно, предложу небольшие корректировки.
Freeze Freeze
План таков: 1. **Подготовка** – считываем массив, сохраняем значения и индексы. - Сложность: O(N). - Храним отсортированную копию значений для двоичного поиска при проверке порогов. 2. **Основной цикл** – проходим по каждому элементу как потенциальной "точкой поворота". - Для каждой точки поворота вычисляем самую длинную префиксную и суффиксную последовательность, удовлетворяющую условию точности (например, все значения в пределах диапазона от точки поворота). - Используем два указателя или монотонную очередь для расширения/сжатия окна с амортизированной сложностью O(1) на каждый шаг. - Запоминаем самую большую найденную длину. 3. **Финальная обработка** – после просмотра всех точек поворота выводим максимальную длину и любые необходимые метаданные (индекс начала, сумма и т.д.). - Сложность: O(N). Общее время: O(N log N) из-за первоначальной сортировки, память: O(N). Внутренний цикл использует только целочисленную арифметику, без тяжелых структур. Это должно легко помещаться в лимит времени в 1 секунду на обычном оборудовании. Если что-то нужно доработать, дай знать.