표의 구간 합 구하기

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

요약
N행 N열 표의 칸 값을 바꾸면서 직사각형 구간 합 질의를 순서대로 답합니다.
난이도

보통10점 중 4점

유형
세그먼트 트리
정답자
아직 제출이 없습니다

문제

N×NN \times N 크기의 표에 자연수가 채워져 있다. 표의 ii행 jj열 칸은 (i,j)(i, j)로 나타낸다. (x1,y1)(x_1, y_1)부터 (x2,y2)(x_2, y_2)까지의 합은 x1≤x≤x2x_1 \le x \le x_2와 y1≤y≤y2y_1 \le y \le y_2를 만족하는 모든 칸 (x,y)(x, y)에 적힌 수를 더한 값이다.

표의 한 칸을 다른 수로 바꾸는 연산과 직사각형 구간의 합을 구하는 연산이 섞여서 들어온다. N=4N = 4이고 표가 아래와 같은 경우를 보자.

1234
2345
3456
4567

(2,2)(2, 2)부터 (3,4)(3, 4)까지의 합은 3+4+5+4+5+6=273 + 4 + 5 + 4 + 5 + 6 = 27이다. 여기서 (2,3)(2, 3)에 적힌 수를 77로 바꾸면 같은 구간의 합은 3+7+5+4+5+6=303 + 7 + 5 + 4 + 5 + 6 = 30이 된다.

표의 처음 상태와 연산이 순서대로 주어질 때, 합을 구하는 연산마다 그 값을 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 표의 크기 NN과 연산의 수 MM이 주어진다. (1≤N≤10241 \le N \le 1024, 1≤M≤100 0001 \le M \le 100\,000)

둘째 줄부터 NN개의 줄에 표의 각 행이 1행부터 차례대로 주어진다. 각 줄에는 NN개의 수가 공백으로 구분되어 있고, 표에 적힌 수는 모두 10001000 이하의 자연수이다.

이어지는 MM개의 줄에는 연산이 한 줄에 하나씩 주어진다. 연산은 네 정수 ww, xx, yy, cc 또는 다섯 정수 ww, x1x_1, y1y_1, x2x_2, y2y_2의 형태이다. w=0w = 0이면 (x,y)(x, y)에 적힌 수를 cc로 바꾸고, w=1w = 1이면 (x1,y1)(x_1, y_1)부터 (x2,y2)(x_2, y_2)까지의 합을 구한다. (1≤x≤N1 \le x \le N, 1≤y≤N1 \le y \le N, 1≤c≤10001 \le c \le 1000, 1≤x1≤x2≤N1 \le x_1 \le x_2 \le N, 1≤y1≤y2≤N1 \le y_1 \le y_2 \le N)

출력

w=1w = 1인 연산마다 구한 합을 입력에 주어진 순서대로 한 줄에 하나씩 출력한다.

예제2

  1. 예제 1

    입력
    4 5
    1 2 3 4
    2 3 4 5
    3 4 5 6
    4 5 6 7
    1 2 2 3 4
    0 2 3 7
    1 2 2 3 4
    0 3 4 5
    1 3 4 3 4
    
    예상 출력
    27
    30
    5
    
  2. 예제 2

    입력
    1 3
    7
    1 1 1 1 1
    0 1 1 1000
    1 1 1 1 1
    
    예상 출력
    7
    1000