1156 - Thao tác trên bảng ô vuông

Một dòng trong bảng ban đầu sẽ bị xóa khi và chỉ khi dòng đó không có ô đen nào. Tương tự, một cột trong bảng ban đầu sẽ bị xóa khi và chỉ khi cột đó không có ô đen nào.

Ta tạo hai mảng đánh dấu như sau:

  • freeRow cho các dòng trong bảng, với freeRow[i] = true nếu dòng thứ i không có ô đen nào.
  • freeCol cho các cột trong bảng, với freeCol[i] = true nếu cột thứ i không có ô đen nào.

Với mỗi ô đen (x_i, y_i), ta sẽ cập nhập freeRow[x_i] = falsefreeCol[y_i] = false.

Gọi cntR là số dòng có ít nhất một ô đen (số chỉ số i sao cho freeRow[i] = false), cntC là số cột có ít nhất một ô đen (số chỉ số i sao cho freeCol[i] = false). Đáp án sẽ là cntR \times cntC.

Độ phức tạp: O(n + m + k)