#1435. [模板] 异或差分

[模板] 异或差分

题目描述

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

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

输入格式

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

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

接下来 qq 行,每行有三个数,ll,rr,kk,代表给 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\% 的数据,有 1≤n≤1051\le n \le 10^5,1≤q≤1051\le q \le 10^5,1≤ai≤2301\leq a_i\leq 2^{30},1≤l≤r≤n1\leq l\leq r\leq n,1≤k≤2301\leq k\leq 2^{30}