#2978. 放置棋子(Placing Rooks)

放置棋子(Placing Rooks)

放置棋子(Placing Rooks)

题目描述

有一个 NNNN 列的网格,初始时没有棋子。

高桥进行 MM 次操作。第 ii 次操作如下:

  1. 移除第 RiR_i 行上的所有棋子
  2. 移除第 CiC_i 列上的所有棋子
  3. 在格子 (Ri,Ci)(R_i, C_i) 放置一个棋子

MM 次操作后网格上棋子的数量。

输入格式

输入从标准输入按以下格式给出:

N M
R_1 C_1
R_2 C_2
\vdots
R_M C_M

输出格式

输出 MM 次操作后棋子的数量。

样例输入 #1

3 6
1 1
1 2
3 3
3 2
1 3
1 3

样例输出 #1

2

操作过程如下:

  • 操作1:清第1行和第1列,放(1,1) → 棋子: (1,1)
  • 操作2:清第1行和第2列,放(1,2) → 棋子: (1,2), (3,3)
  • 操作3:清第3行和第3列,放(3,3) → 棋子: (1,2), (3,3)
  • 操作4:清第3行和第2列,放(3,2) → 棋子: (1,2), (3,2) — 注意(1,2)被清第2列移除但(1,2)之前在第1行,不在第2列... 实际上清第2列会移除(1,2),然后放(3,2) → 棋子: (3,3), (3,2)... 需重新审视

更详细的操作过程:

  • 操作1:清第1行(无)、清第1列(无),放(1,1) → {(1,1)}
  • 操作2:清第1行(移除(1,1))、清第2列(无),放(1,2) → {(1,2)}
  • 操作3:清第3行(无)、清第3列(无),放(3,3) → {(1,2), (3,3)}
  • 操作4:清第3行(移除(3,3))、清第2列(移除(1,2)),放(3,2) → {(3,2)}
  • 操作5:清第1行(无)、清第3列(无),放(1,3) → {(3,2), (1,3)}
  • 操作6:清第1行(移除(1,3))、清第3列(无),放(1,3) → {(3,2), (1,3)}

最终棋子数:2

样例输入 #2

2 3
1 2
2 1
1 1

样例输出 #2

1
  • 操作1:放(1,2) → {(1,2)}
  • 操作2:清第2行(无)、清第1列(无),放(2,1) → {(1,2), (2,1)}
  • 操作3:清第1行(移除(1,2))、清第1列(移除(2,1)),放(1,1) → {(1,1)}

最终棋子数:1

数据范围

  • 1N3×1051 \leq N \leq 3 \times 10^5
  • 1M3×1051 \leq M \leq 3 \times 10^5
  • 1RiN1 \leq R_i \leq N
  • 1CiN1 \leq C_i \leq N
  • 所有输入为整数

知识点与难度

本题涉及的知识点从属于 GESP 四级,难度等级:⭐⭐


测试点分布

Subtask 分值 测试点编号 说明
0 10 1~2 样例
1 20 3~8 小规模 N,M≤10 / 特殊: N=1 / 特殊: 全同行 / 特殊: 全同列
2 15 9~11 Hack: M=1 / Hack: 同格子反复 / Hack: 行列覆盖
3 30 12~20 中规模 N,M≤10^4 / 大规模 N=M=3×10^5
4 25 21~25 随机 N,M≤3×10^5 回归