#6624. 单点修改为某个值,区间求和(8)

单点修改为某个值,区间求和(8)

题目 8:单点修改为某个值,区间求和

题目描述

给定一个长度为 n 的数组:

a[1], a[2], ..., a[n]

现在有 m 次操作:

1 i x:将 a[i] 修改为 x
2 l r:查询区间 [l, r] 的和

注意:操作 1 不是增加 x,而是把 a[i] 直接改成 x


输入格式

第一行两个整数:

n m

第二行 n 个整数表示初始数组。

接下来 m 行,每行一个操作。


输出格式

对于每个操作 2,输出一行答案。


数据范围

1 ≤ n, m ≤ 100000
-10^9 ≤ a[i], x ≤ 10^9
1 ≤ i ≤ n
1 ≤ l ≤ r ≤ n

样例输入

5 5
1 2 3 4 5
2 1 5
1 3 10
2 2 4
1 5 0
2 4 5

样例输出

15
16
4

样例解释

初始:

a = [1, 2, 3, 4, 5]

操作:

1 3 10

表示:

a[3] = 10

由于原来:

a[3] = 3

所以树状数组中实际应该执行:

add(3, 10 - 3)

也就是:

add(3, 7)