개념
직사각형 영역의 합을 여러 번 구할 때 사용합니다. 는 첫 행·첫 열부터 까지의 합입니다. 바깥쪽 번 행과 열은 으로 둡니다.
누적 합 구성
위쪽 영역과 왼쪽 영역을 더하면 왼쪽 위 영역이 두 번 들어갑니다. 이를 한 번 빼고 현재 값을 더합니다.
직사각형 영역의 합 구하기
행 부터 , 열 부터 까지의 합은 다음과 같습니다.
첫 항은 원하는 직사각형을 포함하는 큰 영역입니다. 여기서 보다 위에 있는 행과 보다 왼쪽에 있는 열을 각각 뺍니다. 그러면 왼쪽 위의 겹친 영역은 두 번 빠지므로 마지막 항으로 한 번 더합니다.
예를 들어 격자의 첫 행이 , 둘째 행이 일 때, 둘째 행의 둘째 열부터 셋째 열까지 합은 입니다. 누적 합으로는 전체 에서 첫 행의 합 과 첫 열의 합 를 빼고, 두 번 뺀 왼쪽 위 값 을 더해 을 얻습니다.
격자의 값이 고정되어 있고 서로 다른 직사각형의 합을 여러 번 구할 때 사용합니다. 직사각형의 넓이와 관계없이 네 개의 누적 합으로 답을 구합니다.
복잡도
격자의 행·열 수를 라고 합니다.
| 연산 | 시간복잡도 | 공간복잡도 |
|---|---|---|
| 2차원 누적합 전처리 | 누적합 | |
| 직사각형 합 질의 | 추가 |
예제
문제
격자에서 주어진 직사각형 영역의 합을 구하여라.
입력
첫째 줄에 행 수 , 열 수 , 질의 수 가 공백을 사이에 두고 주어진다. ; 이다.
다음 개 줄에 각 행의 원소 개가 공백을 사이에 두고 주어진다. 각 원소는 이상 이하의 정수이다.
다음 개 줄에 영역의 왼쪽 위 좌표와 오른쪽 아래 좌표 가 공백을 사이에 두고 주어진다. ; 이다. 는 행 번호, 는 열 번호이며 두 경계를 모두 포함한다.
출력
각 영역의 합을 한 줄에 출력한다.