题目描述
有一个 n 列 m 行的棋盘,共 n×m 个方格,我们约定行、列均从 1 开始标号,且第 i 列、第 j 行的方格坐标记为 (i,j)。初始时,所有方格的颜色均为白色。现在,你要对这个棋盘进行 q 次染色操作。
染色操作分为三种,分别为:
- 将一条横线染为黑色。具体地说,给定两个方格 (x1,y1) 和 (x2,y2),保证 x1≤x2,y1=y2,将这两个方格之间的所有方格(包括这两个方格)染为黑色。
- 将一条竖线染为黑色。具体地说,给定两个方格 (x1,y1) 和 (x2,y2),保证 x1=x2,y1≤y2,将这两个方格之间的所有方格(包括这两个方格)染为黑色。
- 将一条斜线染为黑色。具体地说,给定两个方格 (x1,y1) 和 (x2,y2),保证 x1≤x2,x2−x1=y2−y1,将这两个方格之间斜线上所有形如 (x1+i,y1+i)(0≤i≤x2−x1)的方格染为黑色。这种染色操作发生的次数不超过 5 次。
现在你想知道,在经过 q 次染色后,棋盘上有多少个黑色的方格。
输入格式
从文件 color.in
中读入数据。
输入的第一行包含一个整数 c,表示测试点编号。c=0 表示该测试点为样例。
输入的第二行包含三个正整数 n,m,q,分别表示棋盘的列、行和染色操作的次数。
接下来 q 行,每行输入五个正整数 t,x1,y1,x2,y2,其中 t=1 表示第一种染色操作,t=2 表示第二种染色操作,t=3 表示第三种染色操作。x1,y1,x2,y2 表示染色操作的四个参数。
输出格式
输出到文件 color.out
中。
输出一行包含一个整数,表示棋盘上被染为黑色的方格的数量。
0
5 5 3
1 1 3 5 3
2 3 1 3 5
3 1 1 5 5
13
样例 1 解释
在这组样例中,我们一共做了三次染色操作,如下图所示。
第一次操作时,将 (1,3),(2,3),(3,3),(4,3),(5,3) 染为黑色。
第二次操作时,将 (3,1),(3,2),(3,3),(3,4),(3,5) 染为黑色。
第三次操作时,将 (1,1),(2,2),(3,3),(4,4),(5,5) 染为黑色。
样例 2
见选手目录下的 color2.in
与 color2.ans
。
这个样例满足测试点 1∼5 的条件限制。
样例 3
见选手目录下的 color3.in
与 color3.ans
。
这个样例满足测试点 6∼9 的条件限制。
样例 4
见选手目录下的 color4.in
与 color4.ans
。
这个样例满足测试点 10∼13 的条件限制。
样例 5
见选手目录下的 color5.in
与 color5.ans
。
这个样例满足测试点 14∼17 的条件限制。
样例 6
见选手目录下的 color6.in
与 color6.ans
。
这个样例满足测试点 18∼19 的条件限制。
样例 7
见选手目录下的 color7.in
与 color7.ans
。
这个样例满足测试点 20 的条件限制。
数据范围
对于所有测试数据保证:1≤n,m≤109,1≤q≤105,1≤x1,x2≤n,1≤y1,y2≤m,且最多有 5 次第三种染色操作。
测试点编号 |
n,m≤ |
q≤ |
特殊性质 |
1∼5 |
300 |
无 |
6∼9 |
105 |
2,000 |
10∼13 |
105 |
A |
14∼17 |
B |
18∼19 |
无 |
20 |
109 |
特殊性质 A:保证只有第一种染色操作。
特殊性质 B:保证只有第一种和第二种染色操作。