题号:NC200040
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
Special Judge, 64bit IO Format: %lld
题目描述
今晚是不同寻常的一晚,因为今晚是闪耀的钻石之夜 (the splendid diamonds night)!
在今晚,会有很多的钻石奇迹般地出现在地平线以下。
Vanis通过之前找到的地图,知道了钻石的出现情况,地图上说,如果将这个世界看做由一个个方块组成的,则可以从俯视地面的角度观察,以某块地面作为了坐标原点,之后以这块地面的正北方向作为y轴,以这块地面正东方向作为x轴,之后每块地面刚好有唯一的整数坐标与之对应,如作为坐标原点的地面方块的坐标为
)
,其正东方向与正北方向相邻的地面方块坐标分别为
)
、
)
。如下图所示:
坐标为
)
的地面下,会产生
%20%2B%201)
块钻石(其中
)
为最大值函数,取值为a与b二者中较大者。|a|表示取a的绝对值),Vanis想知道以
)
为左下角坐标、以
)
为右上角坐标所构成的矩形区域内的地下一共产生了多少块钻石。
形式化地说,坐标为
)
的地面下会产生
%20%3D%20%5Cmax(%7Cx%7C%2C%5C%20%7Cy%7C)%20%2B%201)
块钻石,Vanis想知道函数
%20%3D%20%5Csum_%7Bi%20%3D%20x_1%7D%5E%7Bx_2%7D%20%5Csum_%7Bj%20%3D%20y_1%7D%5E%7By_2%7D%20f(i%2C%5C%20j))
的值。
举个例子,如下图所示:
红色区域对应查询

,查询结果为21。
黄色区域对应查询

,查询结果为22。
蓝色区域对应查询

,查询结果为6。
输入描述:
第一行输入一个正整数q,表示总共会有q次询问。
之后输入q行,表示每次询问。每一行输入四个整数,依次是
,之间使用一个空格符分隔,表示要查询钻石数的矩形区域。
数据规范:
*
.
*
.
*
.
*
.
* 保证所有输入的数都是整数。
输出描述:
对于每行询问,依次输出询问区域内的钻石数,使用一个整数表示,每个输出占一行。
注意用来存储答案的变量的数据类型,不能使用32位整型。
如果您使用C、C++,不能使用int类型(32位整型),请使用long long int类型(64位整型)。
如果您使用Java,不能使用int类型(32位整型),请使用long类型(64位整型)。
如果您使用Python2、Python3,请随意。。。
示例1
输入
复制
3
0 0 0 0
1 1 2 2
-2 -2 -1 -1
示例2
输入
复制
5
-20000 -20000 20000 -1
-20000 0 20000 20000
-20000 -20000 -1 20000
0 -20000 20000 20000
-20000 -20000 20000 20000
输出
复制
10668066690000
10668466750001
10668066690000
10668466750001
21336533440001
备注:
有大量输入,请至少使用scanf或更高效的输入方式,否则你的程序可能会因为读入开销而超时(TLE)。
如果你使用C++的cin和cout进行读入输出,请:
关闭流同步与刷新(注意:关闭之后不能再使用scanf、printf、getchar、putchar、puts等C输入输出函数),并且避免手动使用endl进行缓冲区刷新,在main函数内部最开头添加两行代码,如下:
#include <iostream>
using namespace std;
int main(void) {
ios::sync_with_stdio(false);
cin.tie(NULL), cout.tie(NULL);
return 0;
}