#YHW906. 区间异或

区间异或

题目描述

给定一个长度为 nn 的整数数组 AA,初始时所有元素都为 00。现在有 mm 次操作,操作分为两种类型:

  1. 区间异或修改:给定三个整数 llrrxx,将数组中从第 ll 个元素到第 rr 个元素(包括第 ll 和第 rr 个元素)的所有元素都异或上 xx
  2. 区间异或和查询:给定两个整数 llrr,查询数组中从第 ll 个元素到第 rr 个元素(包括第 ll 和第 rr 个元素)的所有元素的异或和。

输入格式

第一行包含两个整数 nnmm1n,m51051 \leq n, m \leq 5*10^5),分别表示数组的长度和操作的次数。 接下来 mm 行,每行表示一次操作。如果该行的第一个整数为 11,则表示区间异或修改操作,接下来有三个整数 llrrxx1lrn1 \leq l \leq r \leq n0x1090 \leq x \leq 10^9);如果该行的第一个整数为 22,则表示区间异或和查询操作,接下来有两个整数 llrr1lrn1 \leq l \leq r \leq n)。

输出格式

对于每次区间异或和查询操作,输出一个整数,表示查询结果。

样例输入

5 4
1 2 4 3
2 1 5
1 3 5 2
2 2 4

样例输出

3
3

数据范围

  • 对于 30%30\% 的数据:1n,m1001 \leq n, m \leq 100
  • 对于 60%60\% 的数据:1n,m100001 \leq n, m \leq 10000
  • 对于 100%100\% 的数据:1n,m51051 \leq n, m \leq 5*10^50x1090 \leq x \leq 10^9