Range XORクエリ

与えられた配列には n 個の要素があり、合計で q 件のクエリが存在します。クエリの種類は2つあります:
  1. 指定された範囲のXOR(排他的OR)値を求めるクエリ
  1. 指定した位置の配列要素を更新するクエリ
これらのクエリに対して、効率よく処理を行うことが求められます。

入力

最初の行には、配列の要素数 n とクエリの数 q (1 ≤ n, q ≤ 100 000) が空白区切りで与えられます。
次の行には、n 個の要素 () が空白区切りで与えられます。これは配列の初期状態を表しています。
続く q 行それぞれがクエリを示し、形式は以下の2種類です:
  1. 範囲のXORを求めるクエリ: 行の先頭が 1 で、続いて () が与えられます。このとき、インデックス範囲 [] 内に含まれる要素のXOR値を出力してください。
  1. 配列を更新するクエリ: 行の先頭が 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

To check your solution you need to sign in
Sign in to continue