처음에 배열은 N
(1<=N<=105)
입니다. 당신은이 개 정수 l
및 r
를 부여모든 연산에서 배열 시작 부분에 요소를 추가하고 주어진 범위의 합계를 계산하는 방법은 무엇입니까?
(i) Operation 1 : Op1(l, r)
:이 배열을 감안할 때, 당신은 작업의 2 종류가 수행해야합니다. (1 <= l <= r <= current size of the array)
. l
과 r
(둘 모두 포함) 사이의 인덱스를 가진 모든 요소의 합계를 반환해야합니다. 즉, 현재 배열에있는 요소가 a1, a2, a3 .... an 인 경우 다음을 반환해야합니다. sum : al + al+1 + al+2 ... + ar
.
(ii) Operation 2 : Op2(x)
단일 정수 x (|x| <= 109)
이 제공됩니다. 이 요소를 배열의 시작 부분에 추가하십시오. 이 작업 후 x
은 이제 a1
이되고 old a1
은 a2
이됩니다. 배열의 크기가 1
만큼 증가합니다.
나는 주어진 초기 배열로 세그먼트 트리를 만들었고 범위 합계를 계산할 수 있었지만 ... 어떻게 세그먼트 트리에 하나의 요소를 추가하고 그에 맞게 수정할 수 있습니까?