삼각형의 부분합

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

요약
N개 층으로 이루어진 삼각형 격자가 주어지고, 한 변의 길이가 z인 아래 방향 부분 정삼각형에 들어 있는 값의 합을 묻는 질의 Q개에 답한다.
난이도

보통10점 중 7점

유형
누적 합, 동적 계획법, 수학, 구현
정답자
아직 제출이 없습니다

문제

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

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

입력

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

다음 NN개의 줄에 걸쳐, ii번째 줄에는 ii개의 정수 a_i1,a_i2,...,a_iia\_{i1}, a\_{i2}, ..., a\_{ii}가 공백으로 구분되어 주어진다. a_ija\_{ij}는 위에서 ii번째 층에 위치한 구슬 중 왼쪽에서 jj번째에 위치한 구슬에 적힌 수이다. (0≤a_ij≤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\le x \le N; 1≤y≤x;1 \le y \le x; 2≤z≤N−x+1)2 \le z \le N - x + 1)

출력

QQ개의 줄에 걸쳐 한 줄에 하나씩, 주어진 xx, yy, zz에 대하여, 다음과 같이 정의되는 부분 정삼각형에 포함되는 구슬에 적힌 수의 합을 출력한다.

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

힌트

C/C++, Java 등의 언어에서 일부 변수를 3232비트 정수형으로 선언한 경우 오버플로우가 발생할 수 있음에 유의하라.

예제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