Range XORクエリ
与えられた配列には n
個の要素があり、合計で q
件のクエリが存在します。クエリの種類は2つあります:
指定された範囲のXOR(排他的OR)値を求めるクエリ
指定した位置の配列要素を更新するクエリ
これらのクエリに対して、効率よく処理を行うことが求められます。
入力
最初の行には、配列の要素数 n
とクエリの数 q
(1 ≤ n, q ≤ 100 000) が空白区切りで与えられます。
次の行には、n
個の要素 () が空白区切りで与えられます。これは配列の初期状態を表しています。
続く q
行それぞれがクエリを示し、形式は以下の2種類です:
範囲のXORを求めるクエリ: 行の先頭が
1
で、続いてと
() が与えられます。このとき、インデックス範囲
[]
内に含まれる要素のXOR値を出力してください。配列を更新するクエリ: 行の先頭が
2
で、続いてと
() が与えられます。このとき、配列のインデックス
にある要素を新しい値
に書き換えてください。
出力
範囲のXORクエリが与えられるたびに、その範囲内の要素のXOR値を一行ごとに出力してください。
例
入力 | 出力 |
---|---|
6 4 1 4 2 7 5 3 1 1 3 2 2 9 1 2 5 1 3 6 | 7 9 3 |
Constraints
Time limit: 0.6 seconds
Memory limit: 512 MB
Output limit: 1 MB