Ctrl K

Острова после каждой засыпки

Сложная
Морская акватория — сетка из rows строк и cols столбцов, изначально вся покрыта водой. Строители по очереди засыпают клетки: fills[t] = [r, c] — на шаге t клетка в строке r и столбце c становится сушей. Одна и та же клетка может встретиться в fills несколько раз — повторная засыпка ничего не меняет. **Остров** — группа клеток суши, связанных по сторонам (по горизонтали и вертикали; по диагонали — нет). За краями сетки — вода. Верните массив, где t-й элемент — количество островов сразу после шага t. Пересчитывать всю карту после каждого шага слишком долго — попробуйте обновлять ответ быстрее.
Пример 1
rows=2, cols=3, fills=[[0, 0], [1, 2], [0, 1], [0, 2]] → [1, 2, 2, 1]

После первой засыпки один остров, после второй — два. Клетка (0, 1) примыкает к (0, 0), островов по-прежнему два. Клетка (0, 2) касается и (0, 1), и (1, 2) — острова сливаются в один.

Пример 2
rows=1, cols=1, fills=[[0, 0], [0, 0]] → [1, 1]

Повторная засыпка уже сухой клетки ничего не меняет.

Ограничения
  • 1 ≤ rows, cols ≤ 10⁴
  • rows · cols ≤ 10⁴
  • 1 ≤ len(fills) ≤ 10⁴
  • 0 ≤ r < rows, 0 ≤ c < cols
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиСемейства слов на один обмен СложнаяКого вылечить первым СложнаяКого отключить от сети СложнаяСамая большая группа с общими делителями СложнаяМаршруты между равными вершинами Сложная
загружаем Python…
Вход
rows=2, cols=3, fills=[[0, 0], [1, 2], [0, 1], [0, 2]]
Ожидается
[1, 2, 2, 1]

«Запустить» — первые 3 теста у тебя в браузере, «Отправить» — все 83 теста на сервере, включая скрытые.