P14819 [ICPC 2023 Yokohama R] Color Inversion on a Huge Chessboard

题目描述

你被给予一个按棋盘状排列的方格集合,有 $n$ 行和 $n$ 列。行从上到下编号为 $1$ 到 $n$,列从左到右也编号为 $1$ 到 $n$。 初始时,方格像国际象棋棋盘一样着色:如果 $i + j$ 为奇数,则位于第 $i$ 行第 $j$ 列的方格为黑色;如果为偶数,则为白色。 随后依次进行颜色反转操作,每次操作是以下两种之一: **反转某行的颜色**:给定一个行号,反转指定行中所有方格的颜色。该行中的白色方格变为黑色,黑色方格变为白色。 **反转某列的颜色**:给定一个列号,反转指定列中所有方格的颜色。该列中的白色方格变为黑色,黑色方格变为白色。 需要在每次操作后统计不同的 **区域** 数量。这里,区域是指由相同颜色、直接或间接相连的方格组成的集合。当两个方格共享一条边时,称它们直接相连。

输入格式

输入由单个测试用例组成,格式如下。 $$\begin{aligned} &n\ q \\ &operation_1 \\ &\vdots \\ &operation_q \end{aligned}$$ 整数 $n$ 是行数和列数 ($1 \leq n \leq 5 \times 10^5$)。整数 $q$ 是操作的数量 ($1 \leq q \leq 5 \times 10^5$)。接下来的 $q$ 行按顺序表示要执行的操作。每行是以下两种形式之一: - **ROW $i$**:表示对第 $i$ 行 ($1 \leq i \leq n$) 执行“反转某行的颜色”操作。 - **COLUMN $j$**:表示对第 $j$ 列 ($1 \leq j \leq n$) 执行“反转某列的颜色”操作。

输出格式

输出 $q$ 行。第 $k$ 行应包含一个整数,表示第 $k$ 次操作后区域的数量。

说明/提示

:::align{center} ![](https://cdn.luogu.com.cn/upload/image_hosting/y6mkcr1g.png) 图 F.1. 样例输入 1 的示意图 :::