CF1275E2 Контрольная сумма

题目描述

VKontakte 的用户数据储存在大约数万台服务器上。为了检测磁盘写入过程中的错误,系统会定期将当前的 CRC32 校验和写入磁盘([Wiki](https://en.wikipedia.org/wiki/Cyclic_redundancy_check), IEEE 802-3)。这样,在读取数据时可以重新计算校验和,以确保数据和校验和都被正确记录。 当然,大多数 VKontakte 的服务都内置了校验和检查功能。不过,有一次在某个数据段中,需要将四个连续字节 $a_i, a_{i+1}, a_{i+2}, a_{i+3}$ 替换为新的值 $x_0, x_1, x_2, x_3$,要求整个序列的 CRC32 校验和保持不变。显然,只替换这四个字节会改变校验和,因此还可以自由修改另外四个字节 $a_j, a_{j+1}, a_{j+2}, a_{j+3}$。你的任务是选择新的值,使CRC32 校验和不变,或判断是否有解。在实际修改之前,需要为 $q$ 个独立的测试用例确定如何变化。 请注意,在这个版本的问题中只有一个测试用例,其中 $n=50\,000, q=8$,你可以通过 [这个链接](https://drive.google.com/open?id=117PBFxdKNhMsauCBiI8FAeSW2T9uP0rr) 下载。你的解法不需要通过给定的测试用例,并且不会在这些测试中进行测试。如果希望在给定测试用例上进行测试,请将代码提交到 E3 问题中,前两个测试用例都与此问题中的示例相对应。

输入格式

第一行包含两个整数 $n$ 和 $q$,分别表示文件的字节数和需要解决的问题数($8 \le n \le 2 \times 10^5$;$1 \le q \le 10^5$)。 第二行是 $n$ 个整数 $a_0, a_1, \ldots, a_{n-1}$,表示文件的内容(每个字节的值范围为 $0 \le a_i \le 255$)。 接下来的 $q$ 行,每行包含六个整数 $i, j, x_0, x_1, x_2, x_3$,分别表示从位置 $i$ 开始需要替换的四个字节是 $x_0, x_1, x_2, x_3$,以及从位置 $j$ 开始可以任意修改的四个字节($0 \le i, j \le n-4$;$0 \le x_0, x_1, x_2, x_3 \le 255$)。保证区间 $[i; i+3]$ 和 $[j; j+3]$ 互不重叠。

输出格式

对于每个查询,输出四个整数 $z_0, z_1, z_2, z_3$,表示需要将位置为 $j, j+1, j+2, j+3$ 处的四个字节替换为这些值,以保持 CRC32 校验和不变。如果存在多个解,返回任意一个;如果没有解,输出 `No solution`。 **本翻译由 AI 自动生成**