编程题
### 问题描述
在一个 $n\times m$ 的二维网格上进行一系列的更新和查询操作。你的任务是实现一个二维树状数组支持以下两种操作:
1. `UPDATE x y val`:将点 $(x, y)$ 上的值增加 $val$。
2. `QUERY x1 y1 x2 y2`:查询子矩形 $(x_1, y_1)$ 到 $(x_2, y_2)$(包括两个点)内所有点的值的和。
注意:原始的二维网格所有点的初始值为 $0$。
### 输入格式
第一行包含两个整数 $n$ 和 $m$,表示二维网格的行数和列数。
第二行包含一个整数 $q$,表示操作的数量。
接下来的 $q$ 行每行包含一条指令,指令的格式有两种:
- `UPDATE x y val`:表示将点 $(x, y)$ 上的值增加 $val$。
- `QUERY x1 y1 x2 y2`:表示查询子矩形 $(x_1, y_1)$ 到 $(x_2, y_2)$(包括两个点)内所有点的值的和。
### 输出格式
对于每一个 `QUERY` 指令,输出一个整数,表示子矩形内所有点的值的和。
### 样例输入
```
3 3
5
UPDATE 1 1 5
UPDATE 2 2 -3
QUERY 1 1 2 2
UPDATE 3 3 4
QUERY 1 1 3 3
```
### 样例输出
```
2
6
```
### 样例说明
在第一次查询后,网格的状态如下:
```
5 0 0
0 -3 0
0 0 0
```
所以,第一个 `QUERY` 的输出为 $2$。
在第二次查询前,我们又对点 $(3,3)$ 增加了 $4$,此时网格状态如下:
```
5 0 0
0 -3 0
0 0 4
```
所以,第二个 `QUERY` 的输出为 $6$。
### 测评数据规模
对于所有测试数据,保证:$1 \le n, m \le 1000$,$1 \le q \le 10^5$。