loj#P2782. 「BalticOI 2016 Day1」螺旋

「BalticOI 2016 Day1」螺旋

题目描述

题目译自 BalticOI 2016 Day1 T3「Spiral」

一个矩阵的大小为 (2n+1)×(2n+1)(2n+1)\times (2n+1),我们们通过下述方法填数:数字 11 在中心,数字 22 在其右,其他数字依次按照逆时针螺旋摆放。

你的任务是对于 qq 个询问,计算出一个给定子矩阵所有数字的和对 109+710^9+7 取余的结果。比如以下 n=2n=2 的矩阵,灰色区域的数字之和为 7474

sample

输入格式

第一行,两个整数 nnqq,分别表示矩阵的大小和询问的个数。

接下来 qq 行,每行四个整数 x1,y1,x2x_1,y_1,x_2y2y_2 (nx1x2n,(-n \leq x_1 \leq x_2 \leq n, ny1y2n)-n \leq y_1 \leq y_2 \leq n)。这表示你需要计算一个对角为 (x1,y1)(x_1,y_1)(x2,y2)(x_2,y_2) 的子矩阵的数字之和。

输出格式

对于每个询问,输出一行表示答案(对 109+710^9+7 取余)。

2 3
0 -2 1 1
-1 0 1 0
1 2 1 2
74
9
14

数据范围与提示

对于每个子任务,1q1001 \leq q \leq 100

子任务 分数 数据范围
1 12 1n10001 \leq n \leq 1000
2 15 1n109,x1=x2 and y1=y21 \leq n \leq 10^9,x1=x2\ \mathrm{and}\ y1=y2
3 17 1n1051 \leq n \leq 10^5
4 31 1n109,x1=y1=11 \leq n \leq 10^9,x1=y1=1
5 25 1n1091 \leq n \leq 10^9