CF707E Garlands
题目描述
像所有孩子一样,Alesha 喜欢庆祝新年。在庆祝活动时,他和全家人一起装饰松树。像所有孩子一样,Alesha 喜欢玩彩灯——由灯泡组成的一串灯。
Alesha 用一个 $n \times m$ 的网格作为游戏场地。网格的行从上到下编号为 $1$ 到 $n$,列从左到右编号为 $1$ 到 $m$。
Alesha 有 $k$ 串彩灯,他将它们放置在网格上。每个彩灯串的每个灯泡都位于某个格子的正中央,并且每个格子最多只会放置一个灯泡。当然,属于同一彩灯串且相邻的灯泡,它们被放在两两相邻(共边)的格子里。

彩灯串的放置示例。
任意时刻,每串彩灯可以被打开或关闭。如果某串彩灯被打开,则该串上所有灯泡都会发光;关闭时全部熄灭。每个灯泡在所有彩灯串中的位置是唯一的,而且当它点亮时,能够为 Alesha 带来一个整数的愉悦值。关闭状态的灯泡不会带来愉悦值。
Alesha 可以随时打开或关闭彩灯串,他想知道在网格上某个矩形区域内,点亮灯泡的愉悦值总和。一开始所有彩灯串都是打开的。
Alesha 年纪还小,无法处理大数。他非常请求你帮忙计算。
输入格式
输入的第一行包含三个整数 $n$、$m$ 和 $k$($1 \leq n, m, k \leq 2000$),分别表示网格的行数、列数和彩灯串的数量。
接下来是 $k$ 个彩灯串,每个彩灯串的描述如下:
第一行一个整数 $len$ ($1 \leq len \leq 2000$),表示当前彩灯串的灯泡数。
接下来的 $len$ 行,每行包含三个整数 $i$、$j$ 和 $w$ ($1 \leq i \leq n$,$1 \leq j \leq m$,$1 \leq w \leq 10^9$),表示该灯泡所在的格子坐标及其点亮时的愉悦值。每串彩灯的灯泡依次描述,且相邻的灯泡位于相邻格子。
然后一行一个整数 $q$ ($1 \leq q \leq 10^6$),表示事件的数量。接下来的 $q$ 行,每行描述一个事件,按时间顺序排列。第 $i$ 个事件有以下两种格式之一:
- SWITCH $i$ —— 如果第 $i$ 串彩灯目前是打开状态,则关闭,否则打开。保证 $1 \leq i \leq k$。
- ASK $x_1$ $y_1$ $x_2$ $y_2$ —— 询问以 $(x_1, y_1)$ 为左上角、$(x_2, y_2)$ 为右下角的矩形区域内点亮灯泡的愉悦值之和。保证 $1 \leq x_1 \leq x_2 \leq n$,$1 \leq y_1 \leq y_2 \leq m$。输入中的此类询问不超过 $2000$ 个。
输入中所有数都是整数。
请留意,输入数据非常大,读取时应注意效率,特别是在 C++ 语言的代码里,不推荐用 cin,Java 代码中不推荐用 Scanner。
输出格式
对于每个 ASK 操作,输出一行,表示 Alesha 想知道的区域内愉悦和值。按事件的时间顺序输出。
说明/提示

本图片对应第一组样例。
由 ChatGPT 5 翻译