编程题
### 问题描述 在一个 $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$。
查看答案
赣ICP备20007335号-2