#CSP202512E. 数据抢修
数据抢修
时间限制: 3.0 秒
空间限制: 1024 MB
题目背景
由小 C 和小 F 开发的 CrazyFry 服务突然出现了故障,这导致了诸多平台的访问受到影响,现在他们正在紧急抢修。
题目描述
CrazyFry 目前有 个数据包,每个数据包初始包含一些元素,也可能为空,每个元素有一个权值。数据包编号为 ,默认为激活状态。同一个数据包允许出现权值相同的元素,即数据包可以看做一个可重集。
小 C 为 CrazyFry 设定了一个稳定值 。一个 CrazyFry 数据包是稳定的当且仅当其中任意两个元素的权值 均满足 。其中 表示按位异或运算。显然,只有一个元素的数据包一定是稳定的。
将一个数据包划分为若干子数据包,使得每个元素恰好出现在其中一个子数据包,且每个子数据包都是稳定的,我们称这样的划分方式是稳定的。一个稳定的划分方式所划分出的子数据包数量的最小值为该数据包的维修代价。CrazyFry 的维修代价为目前所有处于激活状态的数据包的维修代价的总和。
现在小 F 要对 CrazyFry 进行测试,他会进行 次操作:
- :在编号为 的数据包中添加一个权值为 的元素,保证 目前处于激活状态。
- :将编号为 的数据包合并到编号为 的数据包里,保证 且 均处于激活状态,此后 处于离线状态,并且不会出现在之后操作中。
- :查询操作,询问目前 CrazyFry 的维修代价。
输入格式
从标准输入读入数据。
第一行读入一个正整数 和一个正整数 。
接下来 行,第 行首先读入一个非负整数 ,表示编号为 的数据包的初始元素个数,随后读入 个非负整数,表示数据包中元素的权值。
下一行读入一个正整数 ,表示操作个数。
接下来 行,每行先读入一个正整数 :
- 若 ,表示进行 操作,接下来读入两个整数 。
- 若 ,表示进行 操作,接下来读入两个整数 。
- 若 ,表示进行 操作。
操作含义同上文描述。
输出格式
输出到标准输出。
对于每一个查询操作,输出一行一个整数,表示 CrazyFry 的维修代价。
3 16
1 21
1 16
1 29
5
3
2 2 1
3
2 3 2
3
3
3
3
样例 1 解释
任意两个元素的权值异或都小于 ,故每个元素必须单独放在一个子数据包里,答案始终为 。
5 15
7 4 7 8 13 13 0 11
1 11
9 9 4 19 0 11 9 5 9 8
2 9 16
4 10 17 12 1
9
1 3 10
1 5 19
2 1 4
1 2 16
3
1 2 18
1 5 11
3
2 5 2
17
19
3 2
0
0
2 7 5
2
2 2 1
3
1
样例 3 解释
,故 可以放入一个子数据包里,答案为 。
子任务
全部测试数据满足:$1\le n, q, \sum\limits_{i = 1}^n m_i \le 5\times 10^5$,所有权值值域为 且 。
本题采用捆绑测试,你只有通过一个子任务中的所有测试点才能得到该子任务的分数。
| 子任务编号 | 分值 | 权值值域上限 | |
|---|---|---|---|
| 1 | 20 | ||
| 2 | 15 | ||
| 3 | |||
| 4 | 20 | ||
| 5 | 30 |