给你一个长度为 n 的整数序列 a1, a2, …, an ,你需要实现以下两种操作,每个操作都可以用四个整数 optlrv 来表示:
opt=1 时,代表把一个区间 [l,r] 内的所有数都 xor 上 v。
opt=2 时, 查询一个区间 [l,r] 内选任意个数(包括 0 个)数 xor 起来,这个值与 v 的最大 xor 和是多少。
输入格式
第一行有两个正整数 n,m。
第二行有 n 个整数表示给你的序列。
之后 m 行每行有四个整数 opt,l,r,v表示一个操作。
输出格式
对于每个 opt=2 的操作,输出一行一个数表示答案~
样例数据
样例输入
4 5
1 14 51 4
2 1 3 0
1 2 3 3
2 1 4 10
1 1 4 514
2 3 4 2
样例输出
61
63
560
子任务
Idea:nzhtl1477,Solution:nzhtl1477,Code:nzhtl1477,Data:nzhtl1477
对于 100% 的数据,满足 1≤n,m≤5×104,值域在 [0,109] 之间