만드는 중입니다

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

삼각형의 부분합

면접 대비

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

요약
숫자가 적힌 삼각형 모양 격자에서 꼭대기가 (x, y)이고 높이가 z인 부분 삼각형에 들어 있는 수의 합을 질의마다 구합니다.
난이도

보통10점 중 6점

유형
누적 합, 배열, 구현
정답자
아직 제출이 없습니다

문제

그림과 같이 N(N+1)2\frac{N(N+1)}{2}개의 구슬이 정삼각형 모양의 격자에 배열되어 있다. 이 격자는 NN개의 층으로 이루어져 있다. 아래로 내려갈수록 층마다 놓인 구슬의 수가 늘어나서, 위에서 ii번째 층에는 ii개의 구슬이 놓인다.

각 구슬에는 수가 하나씩 적혀 있다. 이 격자 위의 부분 정삼각형이 주어질 때마다, 부분 정삼각형에 포함된 구슬에 적힌 수의 합을 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 격자의 층수 NN이 주어진다. (2≤N≤1 500)(2 \le N \le 1\,500)

다음 NN개의 줄에는 ii번째 줄마다 공백으로 구분된 정수 ii개 ai1,ai2,…,aiia_{i1}, a_{i2}, \ldots, a_{ii}가 주어진다. aija_{ij}는 위에서 ii번째 층에 있는 구슬 중 왼쪽에서 jj번째 구슬에 적힌 수이다. (0≤aij≤500 000)(0 \le a_{ij} \le 500\,000)

다음 줄에는 부분 정삼각형의 개수 QQ가 주어진다. (1≤Q≤500 000)(1 \le Q \le 500\,000)

다음 QQ개의 줄에는 부분 정삼각형을 정하는 세 정수 xx, yy, zz가 공백으로 구분되어 주어진다. (1≤x≤N; 1≤y≤x; 2≤z≤N−x+1)(1 \le x \le N;\ 1 \le y \le x;\ 2 \le z \le N - x + 1)

출력

주어진 xx, yy, zz마다 다음과 같이 정의된 부분 정삼각형에 포함된 구슬에 적힌 수의 합을 한 줄에 하나씩 출력한다.

  • 0≤i≤z−10 \le i \le z - 1을 만족하는 모든 정수 ii에 대해, 위에서 x+ix+i번째 층의 구슬 중 왼쪽에서 yy번째부터 y+iy+i번째까지의 구슬을 포함하는 정삼각형

힌트

C/C++, Java 등의 언어에서 일부 변수를 32비트 정수형으로 선언하면 오버플로우가 발생할 수 있으니 주의하라.

예제2

  1. 예제 1

    입력
    4
    1
    2 3
    4 5 6
    7 8 9 10
    6
    1 1 4
    2 1 3
    2 2 3
    3 1 2
    3 2 2
    3 3 2
    
    예상 출력
    55
    35
    41
    19
    22
    25
    
  2. 예제 2

    입력
    2
    1
    500000 1
    2
    1 1 2
    1 1 2
    
    예상 출력
    500002
    500002