AT_aalc001_w 隣接加算
Description
長さ $ k $ の整数列 $ B=(B_1,B_2,\ldots,B_k) $ に対して、次の操作を $ 0 $ 回以上行うことを考えます。
- $ 1 \le i \le k-1 $ を満たす整数 $ i $ と、整数 $ x $ を選ぶ( $ x $ は負でもよい)。
- $ B_i $ に $ x $ を、 $ B_{i+1} $ に $ 2x $ をそれぞれ加える。
操作によって $ B $ のすべての要素を等しくできるとき、 $ B $ を **よい数列** と呼びます。
長さ $ N $ の非負整数列 $ A=(A_1,A_2,\ldots,A_N) $ が与えられます。 クエリを $ Q $ 個処理してください。クエリは以下の $ 2 $ 種類のいずれかです。
- `1 i x`: $ A_i $ を $ x $ に変更する。
- `2 l r`:数列 $ (A_l,A_{l+1},\ldots,A_r) $ がよい数列であるか判定する。
Input Format
入力は以下の形式で標準入力から与えられる。
> $ N $ $ Q $ $ A_1 $ $ A_2 $ $ \ldots $ $ A_N $ $ \mathrm{query}_1 $ $ \mathrm{query}_2 $ $ \vdots $ $ \mathrm{query}_Q $
各クエリは以下のいずれかの形式で与えられる。
> $ 1 $ $ i $ $ x $
> $ 2 $ $ l $ $ r $
Output Format
$ 2 $ 種類目のクエリの個数を $ q $ として、 $ q $ 行出力せよ。 $ j $ 行目には、 $ j $ 番目の $ 2 $ 種類目のクエリに対する答えを、数列 $ (A_l,A_{l+1},\ldots,A_r) $ がよい数列ならば `Yes`、そうでなければ `No` として出力せよ。
Explanation/Hint
### Sample Explanation 1
最初の $ 2 $ 種類目のクエリで得られる数列は $ (1) $ です。操作を行わなくてもすべての要素が等しいため、これはよい数列です。
$ 2 $ 番目の $ 2 $ 種類目のクエリで得られる数列は $ (1,2) $ です。 $ i=1,x=-1 $ として操作を行うと $ (0,0) $ になるため、これはよい数列です。
### Constraints
- $ 1 \le N \le 2 \times 10^5 $
- $ 1 \le Q \le 2 \times 10^5 $
- $ 0 \le A_i \le 10^9 $
- $ 1 $ 種類目のクエリについて、 $ 1 \le i \le N $ , $ 0 \le x \le 10^9 $
- $ 2 $ 種類目のクエリについて、 $ 1 \le l \le r \le N $
- 入力される数値はすべて整数