AT_abc185_f [ABC185F] Range Xor Query

Description

[problemUrl]: https://atcoder.jp/contests/abc185/tasks/abc185_f 長さ $ N $ の整数列 $ A $ があります。 あなたは今からこの数列について $ Q $ 個のクエリを処理します。$ i $ 番目のクエリでは、 $ T_i,\ X_i,\ Y_i $ が与えられるので、以下の処理をしてください。 - $ T_i\ =\ 1 $ のとき $ A_{X_i} $ を $ A_{X_i}\ \oplus\ Y_i $ で置き換える - $ T_i\ =\ 2 $ のとき $ A_{X_i}\ \oplus\ A_{X_i\ +\ 1}\ \oplus\ A_{X_i\ +\ 2}\ \oplus\ \dots\ \oplus\ A_{Y_i} $ を出力する ただし $ a\ \oplus\ b $ は $ a $ と $ b $ のビット単位 xor を表します。 ビット単位 xor とは 整数 $ A,\ B $ のビット単位 xor 、$ A\ \oplus\ B $ は、以下のように定義されます。 \- $ A\ \oplus\ B $ を二進表記した際の $ 2^k $ ($ k\ \geq\ 0 $) の位の数は、$ A,\ B $ を二進表記した際の $ 2^k $ の位の数のうち一方のみが $ 1 $ であれば $ 1 $、そうでなければ $ 0 $ である。 例えば、$ 3\ \oplus\ 5\ =\ 6 $ となります (二進表記すると: $ 011\ \oplus\ 101\ =\ 110 $)。

Input Format

入力は以下の形式で標準入力から与えられる。 > $ N $ $ Q $ $ A_1\ \hspace{7pt}\ A_2\ \hspace{7pt}\ A_3\ \hspace{5pt}\ \dots\ \hspace{5pt}\ A_N $ $ T_1 $ $ X_1 $ $ Y_1 $ $ T_2 $ $ X_2 $ $ Y_2 $ $ T_3 $ $ X_3 $ $ Y_3 $ $ \hspace{22pt}\ \vdots $ $ T_Q $ $ X_Q $ $ Y_Q $

Output Format

$ T_i\ =\ 2 $ であるような各クエリについて、答えを $ 1 $ 行に $ 1 $ つずつ、順に出力せよ。

Explanation/Hint

### 制約 - $ 1\ \le\ N\ \le\ 300000 $ - $ 1\ \le\ Q\ \le\ 300000 $ - $ 0\ \le\ A_i\ \lt\ 2^{30} $ - $ T_i $ は $ 1 $ または $ 2 $ - $ T_i\ =\ 1 $ なら $ 1\ \le\ X_i\ \le\ N $ かつ $ 0\ \le\ Y_i\ \lt\ 2^{30} $ - $ T_i\ =\ 2 $ なら $ 1\ \le\ X_i\ \le\ Y_i\ \le\ N $ - 入力は全て整数 ### Sample Explanation 1 $ 1 $ 個目のクエリでは $ 1\ \oplus\ 2\ \oplus\ 3\ =\ 0 $ を出力します。 $ 2 $ 個目のクエリでは $ 2\ \oplus\ 3\ =\ 1 $ を出力します。 $ 3 $ 個目のクエリでは $ A_2 $ が $ 2\ \oplus\ 3\ =\ 1 $ で置き換えられます。 $ 4 $ 個目のクエリでは $ 1\ \oplus\ 3\ =\ 2 $ を出力します。