#1739. [模板] 异或差分

[模板] 异或差分

题目描述

给定一个长度为 nn 的序列 a1,a2,,ana_1,a_2,\cdots,a_n,同时给出 qq 次操作,每次操作给定一个范围 lrl\sim r,你需要将 al,al+1,,ara_l,a_{l+1},\cdots, a_r 之间的所有数字异或一个数字 kk

操作结束后,输出整个序列的异或和即可,即输出 a1a2ana_1\oplus a_2\oplus \cdots \oplus a_n,其中 \oplus 位异或的数学符号,在 C++ 中其符号为 ^

输入格式

第一行有两个整数 nnqq,代表序列长度和操作次数

第二行有 nn 个数,a1ana_1 \sim a_n,代表初始数字

接下来 qq 行,每行有三个数,llrrkk,代表给 al,al+1,,ara_l,a_{l+1},\cdots, a_r 之间的所有数字异或一个数字 kk

输出格式

输出仅一行,输出所有数字的异或和

3 2
1 1 1
1 2 1
2 3 1
1

提示

对于 100%100\% 的数据,有 1n1051\le n \le 10^51q1051\le q \le 10^51ai2301\leq a_i\leq 2^{30}1lrn1\leq l\leq r\leq n1k2301\leq k\leq 2^{30}