Войти Регистрация
Алгоритмы

165. Топ новостей с меняющимся рейтингом

Средняя

Сервис новостей хранит пары «id → рейтинг». На вход — список операций ops:

["add", id, score] — новая новость (такого id ещё не было); ["update", id, score] — новый рейтинг существующей новости, для неизвестного id ничего не делать; ["top", k] — id k новостей с наибольшим рейтингом.

Верните список ответов на все top по порядку. Внутри ответа — по убыванию рейтинга, при равном рейтинге меньший id раньше. Новостей меньше k — верните все.

В работе: Блок «Главное» в ленте: рейтинг пересчитывают на каждый лайк, а показывают первые 5–10.

Пример 1

Ввод
ops = [["add", 1, 50], ["add", 2, 80], ["add", 3, 60], ["top", 2], ["update", 1, 90], ["top", 2]]
Вывод
[[2, 3], [1, 2]]

После обновления новость 1 выходит на первое место.

Пример 2

Ввод
ops = [["top", 3], ["add", 7, 10], ["update", 9, 100], ["top", 3]]
Вывод
[[], [7]]

Пустой сервис и обновление несуществующего id.

Ограничения

  • 1 ≤ длина ops ≤ 2·10⁵
  • 1 ≤ k ≤ 10
  • 0 ≤ id ≤ 10⁹, |score| ≤ 10⁹
  • Лимит — 2 с на тест (2000 мс).
Как вызывается ваш код Читать ввод и печатать ответ не нужно: мы вызываем функцию на каждом тесте и сравниваем то, что она вернула. print() и console.log() уходят в консоль.
def news_top(ops):
КучаХеш-таблицаЛенивое удалениецельO(n log n)

Источник: VK, отчёт кандидата на Хабре, 2026. Условие пересказано своими словами.