잘못된 실수
시간 제한8초메모리 제한1024 MB
배열의 한 원소를 갱신할 때마다 배열의 각 값 x에 대해 a[x]를 더한 결과를 출력합니다.
문제
문제가 많은 코드의 고문서(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는 인덱스가 아니라 배열 안의 값을 가리킨다.
이 함수가 정확히 어떻게 동작하는지 궁금해서 철저히 테스트하기로 했다. 초기 배열에서 시작해 일련의 갱신을 적용한다. 각 갱신은 배열의 값 하나를 바꾼다. 갱신할 때마다 함수의 반환값이 얼마인지 구한다.
입력
입력은 다음과 같다.
- 정수 ()이 한 줄에 주어진다. 배열의 길이이다.
- 정수 개로 이루어진 ()가 한 줄에 주어진다. 초기 배열의 값들이다.
- 정수 ()가 한 줄에 주어진다. 테스트에서 적용할 갱신의 개수이다.
- 개의 줄에 정수 와 ()가 주어진다. 배열의 번째 원소를 새 값 로 갱신한다는 뜻이다.
배열은 0부터 시작하는 인덱스를 사용한다는 점에 유의하라.
출력
각 갱신마다, 그 갱신을 적용한 후의 배열에 함수 sum을 적용했을 때의 반환값을 출력한다.