说明
[BalticOI 2016 Day1]螺旋
一个矩阵的大小为 (2n+1)×(2n+1),我们们通过下述方法填数:数字 1 在中心,数字 2 在其右,其他数字依次按照逆时针螺旋摆放。
你的任务是对于 q 个询问,计算出一个给定子矩阵所有数字的和对 (109+7) 取余的结果。比如以下 n=2 的矩阵,灰色区域的数字之和为 74:

输入格式
第一行,两个整数 n 和 q,分别表示矩阵的大小和询问的个数。
接下来 q 行,每行四个整数 x1,y1,x2 和 y2 (−n≤x1≤x2≤n, −n≤y1≤y2≤n)。这表示你需要计算一个对角为 (x1,y1) 和 (x2,y2) 的子矩阵的数字之和。
输出格式
对于每个询问,输出一行表示答案(对 109+7 取余)。
由 @I_love_him52 提供翻译
2 3
0 -2 1 1
-1 0 1 0
1 2 1 2
74
9
14
提示
Subtask 1 (12 points)
- 1≤n≤1000
Subtask 2 (15 points)
Subtask 3 (17 points)
- 1≤n≤105
Subtask 4 (31 points)
Subtask 5 (25 points)
- 1≤n≤109
对于 100% 数据,1≤q≤100,1≤n≤109,−n≤x1≤x2≤n,−n≤y1≤y2≤n。