Компоненти зв'язності в сітці Насера#13101

Компоненти зв'язності в сітці Насера

2 секунди
256 мегабайтів

Насер дає вам сітку з рядків та стовпців, яка містить цілі числа.

Вам потрібно вибрати стовпець (1 \le c < m), щоб розділити сітку на дві частини:

Дві клітинки вважаються сусідніми, якщо вони мають спільну сторону (зверху, знизу, зліва або справа). Дві сусідні клітинки, що лежать в одній частині, вважаються з'єднаними, якщо вони містять рівні значення. Компонента зв'язності — це максимальна за включенням група клітинок, у якій від будь-якої клітинки можна дістатися до будь-якої іншої через ланцюжок з'єднаних сусідніх клітинок.

Наприклад, у сітці:

\begin{pmatrix} 1 & 1 & 2 \\ 1 & 2 & 2 \\ 3 & 3 & 2 \end{pmatrix}

Якщо ми розділимо її за стовпцем c=1, то ліва частина буде такою:

\begin{pmatrix} 1 \\ 1 \\ 3 \end{pmatrix}

Найбільша компонента зв'язності в лівій частині має розмір (дві клітинки зі значенням ). Права частина:

\begin{pmatrix} 1 & 2 \\ 2 & 2 \\ 3 & 2 \end{pmatrix}

Найбільша компонента зв'язності у правій частині має розмір (чотири клітинки зі значенням ).

Нехай — розмір найбільшої компоненти зв'язності в лівій частині, а — розмір найбільшої компоненти зв'язності у правій частині.

Ваше завдання — вибрати стовпець так, щоб мінімізувати |L - R|.

У наведеному вище прикладі, якщо вибрати c=1, то L=2, R=4 і |L-R|=2. Якщо вибрати c=2, то та обчислюються для нового розбиття, і ми беремо мінімум за всіма варіантами вибору .

Вхідні дані

Кожен тест містить декілька тестових випадків. Перший рядок містить одне ціле число (1 \le t \le 10^4) — кількість тестових випадків. Далі йде опис тестових випадків.

Перший рядок кожного тестового випадку містить два цілих числа та (1 \le n, 2 \le m, n \cdot m \le 2 \cdot 10^5) — кількість рядків та стовпців.

Кожен з наступних рядків містить цілих чисел a_{i,1}, a_{i,2}, \ldots, a_{i,m} (1 \le a_{i,j} \le 10^9) — елементи сітки.

Гарантується, що сума n \cdot m за всіма тестовими випадками не перевищує 2 \cdot 10^5.

Вихідні дані

Для кожного тестового випадку виведіть одне ціле число — мінімальне можливе значення |L - R|.

Приклади

Приклад 1

Loading
Loading

Оцінювання

  1. Підзадача ( балів) : (n = 1)

  2. Підзадача ( балів) : (m \le 50)

  3. Підзадача ( балів) : Без додаткових обмежень.