아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

사탕

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

요약
배열에서 값을 갱신하면서 구간의 교대 가중 합 ( (-1)^(i-l) * Ai * (i-l+1) )을 구하는 질의에 답한다.
난이도

보통10점 중 6점

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

문제

Carl은 N개의 사탕 배열을 가지고 있다. 배열의 i번째 원소(1부터 시작)는 Ai이며 i번째 사탕의 단맛 값을 나타낸다. 그는 Q번의 연산을 수행하려고 한다. 연산은 두 가지 종류가 있다.

  • 배열에 있는 사탕의 단맛 값을 바꾼다.
  • 부분 배열의 단맛 점수를 질의한다.

인덱스 l부터 r까지의 부분 배열에 대한 단맛 점수는 Al × 1 - Al+1 × 2 + Al+2 × 3 - Al+3 × 4 + Al+4 × 5 ... 이다.

더 형식적으로, 단맛 점수는 l부터 r까지의 모든 i에 대해 (-1)i-lAi × (i - l + 1)의 합이다.

예를 들어, 다음의 단맛 점수는:

  • [3, 1, 6]은 3 × 1 - 1 × 2 + 6 × 3 = 19
  • [40, 30, 20, 10]은 40 × 1 - 30 × 2 + 20 × 3 - 10 × 4 = 0
  • [2, 100]은 2 × 1 - 100 × 2 = -198

Carl은 모든 질의의 단맛 점수의 총합을 알고 싶어 한다. 질의 연산이 하나도 없으면 합은 0으로 간주한다. Carl이 합을 구하도록 도와줄 수 있는가?

입력

입력의 첫 줄에는 테스트 케이스의 수 T가 주어진다. T개의 테스트 케이스가 이어진다. 각 테스트 케이스는 N과 Q가 있는 한 줄로 시작한다. 두 번째 줄에는 배열을 나타내는 N개의 정수가 있다. i번째 정수는 Ai이다. 다음 Q줄의 j번째 줄은 j번째 연산을 나타낸다. 각 줄은 연산의 종류를 나타내는 문자 하나(U는 갱신, Q는 질의)로 시작한다.

  • 갱신 연산이면 두 정수 Xj와 Vj가 이어지며, 배열의 Xj번째 원소를 Vj로 바꾼다는 뜻이다.
  • 질의 연산이면 두 정수 Lj와 Rj가 이어지며, Lj번째 원소부터 Rj번째 원소까지(양 끝 포함)의 부분 배열의 단맛 점수를 묻는다.

출력

각 테스트 케이스마다 Case #x: y를 포함하는 한 줄을 출력한다. 여기서 x는 테스트 케이스 번호(1부터 시작)이고 y는 모든 질의의 단맛 점수의 총합이다.

제한

  • 1 ≤ T ≤ 100.
  • 모든 i에 대해 1 ≤ Ai ≤ 100.
  • 최대 6개의 테스트 케이스에서 1 ≤ N ≤ 2 × 105이고 1 ≤ Q ≤ 105이다.
  • 나머지 테스트 케이스에서는 1 ≤ N ≤ 300이고 1 ≤ Q ≤ 300이다.
  • j번째 연산이 갱신 연산이면 1 ≤ Xj ≤ N이고 1 ≤ Vj ≤ 100.
  • j번째 연산이 질의 연산이면 1 ≤ Lj ≤ Rj ≤ N.

힌트

예제 케이스 #1에서:

  • 첫 번째 질의는 [3, 9, 8]의 단맛 점수를 묻고, 이는 3 × 1 - 9 × 2 + 8 × 3 = 9이다.
  • 두 번째 질의는 [2]의 단맛 점수를 묻고, 이는 2 × 1 = 2이다.
  • 세 번째 질의는 [1, 10]의 단맛 점수를 묻고, 이는 1 × 1 - 10 × 2 = -19이다.

따라서 최종 출력은 9 + 2 - 19 = -8이어야 한다.

예제 케이스 #2에서:

  • 첫 번째이자 유일한 질의는 [7, 5]의 단맛 점수를 묻고, 이는 7 × 1 - 5 × 2 = -3이다.

따라서 최종 출력은 -3이어야 한다.

예제1

  1. 예제 1

    입력
    2
    5 4
    1 3 9 8 2
    Q 2 4
    Q 5 5
    U 2 10
    Q 1 2
    3 3
    4 5 5
    U 1 2
    U 1 7
    Q 1 2
    
    예상 출력
    Case #1: -8
    Case #2: -3