题号:NC19776
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 1024 M,其他语言2048 M
64bit IO Format: %lld
题目描述
有 N 个整数数组,将他们按照这样的步骤合并:
* 从所有非空数组的第一个元素中选最小的那个,从它所在的数组中删去并加入到输出数组的末尾
* 重复执行上述过程,直到所有数组为空。
很显然,如果所有数组都是有序的,你得到的数组也会是有序的。
现在你知道这 N 个数组的值,需要实现这样一个算法,支持对数组的修改和查询。
* 对于一个修改操作,给定两个参数 x, y,表示将数组中的 x 替换成 y 。在操作前和操作后都保证同一个数字最多出现一次。
* 对于一个查询操作,给定一个参数 x,表示查询合并后的数组从 x 位开始的 K 个数字。
聪明的你一定能出色的完成这道题!
输入描述:
第一行三个整数 N, M, K.
接下来 N 行描述 N 个数组,每行以一个整数 n 开始,表示这个数组的元素个数,后面接 n 个整数 a1, ..., an. 注意,这里 a1, ..., an 以大写16进制表示,每个数字长度不超过4。
接下来 M 行描述 M 个操作,满足下面两种形式之一:
* "U x y"(不含引号)。表示一次修改操作。x, y 以大写16进制的形式给出,长度不超过4.
* "Q x"(不含引号)。表示一次查询操作。x 以大写16进制的形式给出,长度不超过4.
输出描述:
对于每个询问操作,输出合并后的数组从第 x 项开始的最多 K 个元素,以空格隔开,用大写16进制表示,注意不要有前导零。
示例1
输入
复制
2 5 3
2 4 2
3 6 A 1
Q 3
U 1 F
Q 4
U F 1
Q 1
备注:
2 ≤ N ≤ 10

M ≤ 105,其中询问次数乘以K 不超过 2·105。
K ≤ 10