커피숍 게임 2

면접 대비

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

요약
배열에서 구간 합을 구한 뒤 특정 위치의 값을 바꾸는 질의를 Q번 처리하는 문제입니다(구간의 시작과 끝이 뒤바뀔 수도 있습니다).
난이도

보통10점 중 4점

유형
세그먼트 트리, 누적 합, 배열
정답자
아직 제출이 없습니다

문제

커피숍에서 다음과 같은 게임을 한다.

처음에 NN개의 정수가 일렬로 놓여 있다. 한 턴은 두 단계로 이루어진다.

  1. 두 위치 xx, yy가 주어지면, 현재 배열에서 xx번째 수부터 yy번째 수까지의 합을 구한다.
  2. 위치 aa와 값 bb가 주어지면, aa번째 수를 bb로 바꾼다.

각 턴마다 구해야 하는 구간 합을 모두 출력하는 프로그램을 작성하라.

입력

첫째 줄에 수의 개수 NN과 턴의 개수 QQ가 주어진다. (1≤N,Q≤100,000)(1 \le N, Q \le 100,000)

둘째 줄에는 처음 배열에 들어 있는 정수 NN개가 주어진다.

셋째 줄부터 QQ개의 줄에는 한 턴을 나타내는 네 정수 xx, yy, aa, bb가 주어진다. 이는 현재 배열에서 xx번째 수부터 yy번째 수까지의 합을 구한 뒤, aa번째 수를 bb로 바꾸라는 뜻이다.

입력되는 모든 정수는 −231-2^{31} 이상 231−12^{31}-1 이하이다.

출력

각 턴에서 구한 구간 합을 한 줄에 하나씩 출력한다.

힌트

보통 x∼yx \sim y는 xx번째 수부터 yy번째 수까지를 뜻한다. 이 문제에서는 x>yx > y인 경우에도 같은 규칙을 적용해, yy번째 수부터 xx번째 수까지의 합을 구한다.

예제1

  1. 예제 1

    입력
    5 2
    1 2 3 4 5
    2 3 3 1
    3 5 4 1
    
    예상 출력
    5
    10