#YC233. 鸽巢动态统计问题

鸽巢动态统计问题

鸽巢动态统计问题

题目描述

NN 只鸽子(编号 11NN)和 NN 个巢穴(编号 11NN)。初始时,每只鸽子 ii 位于巢穴 ii 中。

需要处理 QQ 个查询操作,操作分为两种类型:

操作类型

  1. 移动操作 1 P H

    • 将鸽子 PP 移动到巢穴 HH
    • 保证移动前鸽子 PP不在巢穴 HH
  2. 统计操作 2

    • 输出当前包含多于一只鸽子的巢穴数量

输入格式

NN QQ

query1\mathrm{query}_1

query2\mathrm{query}_2

\vdots

queryQ\mathrm{query}_Q

每个queryquery一定是下列两种情况之一:

1 P H

2

  • 2N1062 \leq N \leq 10^6
  • 1Q3×1051 \leq Q \leq 3\times 10^5
  • 1P,HN1 \leq P, H \leq N
  • 数据保证鸽子 PP 在移动之前不在鸽巢 HH 中.
  • 所有输入数据均为整数.

输出格式

对于每一个queryquery22的情况,打印此时一共有多少个巢满足

22 \leq 巢内鸽子数

注意换行打印

样例

4 7
2
1 1 2
2
1 3 2
2
1 3 4
2
0
1
1
2

鸽子动态操作示例1详解

初始状态

  • 4只鸽子初始所在巢穴:
    鸽子1 → 巢穴1
    鸽子2 → 巢穴2
    鸽子3 → 巢穴3
    鸽子4 → 巢穴4
  • 各巢穴鸽子数量:
    [1, 1, 1, 1]

操作流程与结果

操作序号 操作类型 具体操作 巢穴状态变化 统计结果说明
1 统计操作 查询当前状态 巢穴计数保持 [1,1,1,1] 输出0​(无巢穴含多只鸽子)
2 移动操作 鸽子1 → 巢穴2 巢穴状态变为 [0,2,1,1] ——
3 统计操作 查询更新后状态 巢穴2含2只鸽子 输出1
4 移动操作 鸽子3 → 巢穴2 巢穴状态变为 [0,3,0,1] ——
5 统计操作 查询更新后状态 巢穴2含3只鸽子 输出1
6 移动操作 鸽子3 → 巢穴4 巢穴状态变为 [0,2,0,2] ——
7 统计操作 最终状态查询 巢穴2和4各含2只鸽子 输出2

关键状态对比

操作节点 巢穴1 巢穴2 巢穴3 巢穴4 统计结果
初始状态 1 1 1 0
操作2后 0 2 ——
操作3后 1
操作4后 3 0 ——
操作5后 1
操作6后 2 2 ——
操作7后 2
5 10
2
1 4 3
1 4 5
2
1 3 1
2
1 2 3
1 2 5
1 1 3
2

0
1
2
1