题目描述
题目译自 BalticOI 2016 Day1 T3「Spiral」
一个矩阵的大小为 (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 取余)。
2 3
0 -2 1 1
-1 0 1 0
1 2 1 2
74
9
14
数据范围与提示
对于每个子任务,1≤q≤100。
子任务 |
分数 |
数据范围 |
1 |
12 |
1≤n≤1000 |
2 |
15 |
1≤n≤109,x1=x2 and y1=y2 |
3 |
17 |
1≤n≤105 |
4 |
31 |
1≤n≤109,x1=y1=1 |
5 |
25 |
1≤n≤109 |