만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

잘못된 실수

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

요약
배열의 한 원소를 갱신할 때마다 배열의 각 값 x에 대해 a[x]를 더한 결과를 출력합니다.
난이도

보통10점 중 5점

유형
배열, 해시맵, 구현
정답자
아직 제출이 없습니다

문제

문제가 많은 코드의 고문서(Grand Archive of Problematic Code)를 살펴보다가, 한 코드 조각에서 끔찍한 실수를 발견했다. 이 코드는 배열의 합을 구하려고 했지만 인덱스와 값을 섞어 썼다. 함수 sum의 코드는 아래와 같다.

long long sum(vector<int> a) {
    long long ans = 0;
    for (int x : a)
        ans += a[x];
    return ans;
}
def sum(a: list[int]) -> int:
    ans = 0
    for x in a:
        ans += a[x]
    return ans
long sum(int[] a) {
    long ans = 0;
    for (int x : a)
        ans += a[x];
    return ans;
}
fun sum(a: List<Int>): Long {
    var ans = 0L
    for (x in a)
        ans += a[x]
    return ans
}

함수 sum은 배열의 합을 구하려고 하지만, x는 인덱스가 아니라 배열 안의 값을 가리킨다.

이 함수가 정확히 어떻게 동작하는지 궁금해서 철저히 테스트하기로 했다. 초기 배열에서 시작해 일련의 갱신을 적용한다. 각 갱신은 배열의 값 하나를 바꾼다. 갱신할 때마다 함수의 반환값이 얼마인지 구한다.

입력

입력은 다음과 같다.

  • 정수 nn (1≤n≤2⋅1051 \leq n \leq 2 \cdot 10^5)이 한 줄에 주어진다. 배열의 길이이다.
  • 정수 nn개로 이루어진 aa (0≤a<n0 \leq a < n)가 한 줄에 주어진다. 초기 배열의 값들이다.
  • 정수 tt (1≤t≤2⋅1051 \leq t \leq 2 \cdot 10^5)가 한 줄에 주어진다. 테스트에서 적용할 갱신의 개수이다.
  • tt개의 줄에 정수 xx와 vv (0≤x,v<n0 \leq x,v < n)가 주어진다. 배열의 xx번째 원소를 새 값 vv로 갱신한다는 뜻이다.

배열은 0부터 시작하는 인덱스를 사용한다는 점에 유의하라.

출력

각 갱신마다, 그 갱신을 적용한 후의 배열에 함수 sum을 적용했을 때의 반환값을 출력한다.

예제2

  1. 예제 1

    입력
    5
    0 0 3 2 0
    4
    1 1
    0 4
    3 4
    1 4
    
    예상 출력
    6
    10
    9
    8
    
  2. 예제 2

    입력
    5
    4 2 2 4 2
    3
    0 1
    4 3
    2 3
    
    예상 출력
    10
    13
    16