AtCoder-abc346_e 题解

题意

有一个 \(H \times W\) 的单元格,初始时颜色都为 \(0\)

接下来有 \(M\) 次操作:

  1. 将第 \(A\) 行都涂为颜色 \(X\)

  2. 将第 \(A\) 列都涂为颜色 \(X\)

先输出单元格中有多少不同的颜色,然后对于每个出现在单元格中的颜色,先输出颜色,在输出为这个颜色的方块的数量。

思路

\(r_i,rt_i,c_i,ct_i\) 分别表示最后一次第 \(i\) 行被涂的颜色,最后一次涂第 \(i\) 行的操作编号,最后一次第 \(i\) 列被涂的颜色,最后一次涂第 \(i\) 列的操作编号。

那么对于第 \(i\) 行:

设有 \(num\) 个格子在后面涂列的时候被覆盖了,则 \(num\) 为所有 \(ct_j>rt_i\)\(j\) 的个数,即在第 \(rt_i\) 次操作后,第 \(ct_j\) 次操作涂了第 \(c_j\) 列,将 \((i,j)\) 位置的格子覆盖了。

那么对于 \(1 \le i \le H\),只需要求出 \(ct_j>rt_i\)\(j\) 的个数 \(num\),那么这一行中没有被覆盖的方块的数量就为 \(W-num\)

我们可以把 \(ct\) 排序,然后二分出 \(num\) 的值。

对于列同理。

初始时把颜色都设为 \(-1\),最后颜色为 \(0\) 格子的数量再加上颜色为 \(-1\) 的格子的数量,否则需要处理很多细节。

那么如何计算颜色为 \(-1\) 的格子的数量呢?

设所有操作一共没有涉及到 \(t_1\) 行与 \(t_2\) 列,则 \(-1\) 的格子的数量为 \(t_1 \times t_2\)

代码

posted @ 2024-06-09 13:03  lrx139  阅读(2)  评论(0编辑  收藏  举报