#P7096. [yLOI2020] 泸沽寻梦
[yLOI2020] 泸沽寻梦
题目背景
我应是泸沽烟水里的过客,
孑然弹铗,划天地开阖。
邂逅过的,梦醒之余,
却忘了该如何洒脱。
——银临《泸沽寻梦》
题目描述
南有仙地,名曰摩梭,摩梭有湖,泸沽是也。
茶茶在泸沽湖中寻找自己的梦。氤氲雾气中,茶茶的 个梦排成了一个序列。茶茶的所有梦境都是拉瓦的样子。为了区分这些拉瓦,茶茶规定从左到右第 个的拉瓦的美颜值是一个非负整数 。面对着这些梦,茶茶会进行 次操作,每次操作会给定两个数字 ,然后将 和 都对 做按位异或。每次操作完之后,茶茶都想知道,当前的梦序列中,有多少个子区间 ,满足 且区间的异或和为 ,请你回答茶茶的问题。
区间 的异或和定义为 $a_l \otimes a_{l + 1} \otimes \dots a_{r - 1} \otimes a_r$。其中 代表二进制按位异或运算,即 C++ 语言的「^」运算符。两个区间不同当且仅当两区间左端点不同或两区间右端点不同或两区间左右端点均不同。
为了避免输出过大,你只需要输出四个整数,分别表示你所有回答的按位异或之和、你共有多少次回答的答案是奇数,你的所有答案中的最大值、你的所有答案中的最小值。
输入格式
第一行有两个整数,分别表示梦境的数量 和操作的次数 。
第二行有 个用空格隔开的整数,第 个整数表示第 个拉瓦的美颜值 。
接下来 行,每行两个整数,依次表示一次操作的 和 。
输出格式
输出四行,每行一个整数,依次表示你所有回答的按位异或之和、你共有多少次回答的答案是奇数,你的所有答案中的最大值、你的所有答案中的最小值。
5 3
1 2 3 4 5
1 3
2 3
3 3
3
3
3
1
提示
样例 1 解释
- 第一次操作后,序列变为 ,有且仅有区间 的异或和为 ,故本次询问的答案为 。
- 第二次操作后,序列变为 ,区间 、、 的异或和为 ,故本次询问的答案为 。
- 第三次操作后,序列变为 ,有且仅有区间 的异或和为 ,故本次询问的答案为 。所有答案的异或和为 ,有 次回答的答案为奇数,所有答案中的最大值为 ,最小值为 。
数据规模与约定
本题采用多测试点捆绑测试,共有 5 个子任务。
- 子任务 ( 分):保证 。
- 子任务 ( 分):保证 。
- 子任务 ( 分):保证 。
- 子任务 ( 分):保证 。
- 子任务 ( 分):无特殊限制。
对于前四个子任务,保证 ;
对于全部的测试点,保证 ,,。
提示
- 请注意, 不能说明 。
- 请注意大量数据读入对程序效率造成的影响。
- 本题的特殊输出方式只是为了避免输出过大造成程序超时,与本题解法无关。
- 请注意常数因子对程序效率造成的影响。
- 本题共有两个样例文件,请见附加文件中的 dream.zip。