만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

격자 속의 숫자

시간 제한3초메모리 제한1024 MB

요약
양의 정수를 차례로 이어 붙인 숫자열을 너비 M인 격자에 행 단위로 채울 때, 주어진 직사각형 영역의 숫자 합을 구합니다.
난이도

어려움10점 중 9점

유형
행렬, 누적 합, 수학, 구현
정답자
아직 제출이 없습니다

문제

모든 자연수를 1부터 순서대로, 빈칸 없이 왼쪽에서 오른쪽으로 이어 붙인 문자열을 SS라고 하자.

12345678910111213141516171819202122232425···

SS와 관련된 문제는 이미 많이 있다. 최근의 한 필기시험에서는 SS의 2×1062 \times 10^6번째 자리를 손으로 구하는 문제가 출제되었다.

문자열 SS는 가로로 무한히 이어지지만, 이 문제가 인쇄된 종이나 이 문제를 띄운 모니터의 가로 폭은 고정되어 있다. SS를 모든 숫자의 글자 폭이 같은 글꼴로 인쇄하거나 적절한 편집기로 읽으면, 아래와 같이 모든 줄에 MM개의 숫자가 순서대로 놓이게 된다.

numbergrid

이 방식으로 SS의 처음 109×M10^9 \times M글자를 109×M10^9 \times M 크기의 행렬 AA에 순서대로 채워 넣었다고 하자. 위 그림은 M=31M = 31일 때 AA의 1행부터 7행까지를 보여 준다.

행렬이 2차원이니 2차원 부분합을 구하고 싶지 않은가? 행렬 AA의 직사각형 영역 [r1,r2]×[c1,c2][r_1, r_2] \times [c_1, c_2]가 주어지면, 이 영역에 포함된 숫자의 합, 즉 ∑i=r1r2∑j=c1c2Ai,j\sum_{i=r_1}^{r_2} \sum_{j=c_1}^{c_2} A_{i,j}의 값을 구하는 프로그램을 작성하라. 한 번만 구하기는 아까우니 QQ번 구하도록 하자.

입력

첫 번째 줄에 정수 MM(1≤M≤100,0001 \le M \le 100,000)과 질의의 수 QQ(1≤Q≤1,0001 \le Q \le 1,000)가 주어진다.

다음 QQ개의 줄에는 네 개의 정수 r1r_1, c1c_1, r2r_2, c2c_2(1≤r1≤r2≤1091 \le r_1 \le r_2 \le 10^9, 1≤c1≤c2≤M1 \le c_1 \le c_2 \le M)가 주어진다.

출력

각 질의마다 ∑i=r1r2∑j=c1c2Ai,j\sum_{i=r_1}^{r_2} \sum_{j=c_1}^{c_2} A_{i,j}의 값을 입력된 순서대로 한 줄에 하나씩 출력한다.

예제1

  1. 예제 1

    입력
    31 3
    1 1 7 31
    4 4 5 5
    5 25 6 30
    
    예상 출력
    946
    23
    79