만드는 중입니다

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

칠판 수 합 구하기

면접 대비

시간 제한1초메모리 제한512 MB

요약
배열에 원소 값 변경과 오른쪽 순환 이동 명령이 주어질 때, 각 명령을 수행한 뒤의 배열 합을 구합니다.
난이도

쉬움10점 중 3점

유형
배열, 시뮬레이션
정답자
아직 제출이 없습니다

문제

암산 대회의 심사위원장이 새로운 과제를 냈다. 처음에 칠판에 정수 nn개 a1,a2,…,ana_1, a_2, \ldots, a_n이 적혀 있다. 참가자는 그 뒤에 다음 두 종류의 명령을 수행해야 한다.

  1. ii번째 수를 지우고 그 자리에 xx를 적는다. 그러면 수열은 a1,…,ai−1,x,ai+1,…,ana_1, \ldots, a_{i-1}, x, a_{i+1}, \ldots, a_n이 된다.
  2. 수열을 오른쪽으로 kk만큼 순환 이동한다. 그러면 수열은 an−k+1,…,an,a1,…,an−ka_{n-k+1}, \ldots, a_n, a_1, \ldots, a_{n-k}가 된다.

참가자는 명령을 수행할 때마다 칠판에 적힌 모든 수의 합을 구해 심사위원에게 보고해야 한다. 심사위원은 답을 확인하기 위해 요구되는 합을 직접 계산해야 한다.

입력

첫째 줄에 처음 칠판에 적힌 정수의 개수 nn이 주어진다 (2≤n≤1052 \leq n \leq 10^5).

둘째 줄에 공백으로 구분된 정수 nn개 a1,a2,…,ana_1, a_2, \ldots, a_n이 주어진다 (−109≤ai≤109-10^9 \leq a_i \leq 10^9).

셋째 줄에 수행할 명령의 개수 qq가 주어진다 (1≤q≤1051 \leq q \leq 10^5).

이어지는 qq개의 줄에 각각 다음 형식 중 하나로 명령이 주어진다.

  • 1 i x: ii번째 수를 xx로 바꾼다 (1≤i≤n1 \leq i \leq n; −109≤x≤109-10^9 \leq x \leq 10^9).
  • 2 k: 수열을 오른쪽으로 kk만큼 순환 이동한다 (1≤k<n1 \leq k < n).

출력

qq개의 줄을 출력한다. 각 줄에는 정수 하나를 적는다. ii번째 줄에는 처음 ii개의 명령을 수행한 후 칠판에 적힌 수들의 합을 적는다.

답이 클 수 있으므로 64비트 정수형이 필요하다. 파스칼에서는 int64, C++에서는 long long, 자바에서는 long을 사용한다.

힌트

문제의 예시에서 처음 수열은 4,1,2,1,5,34, 1, 2, 1, 5, 3이다. 첫 번째 명령 후 수열을 오른쪽으로 3칸 이동하면 1,5,3,4,1,21, 5, 3, 4, 1, 2가 되고, 합은 1+5+3+4+1+2=161 + 5 + 3 + 4 + 1 + 2 = 16이다. 두 번째 명령은 세 번째 원소를 1010으로 바꾸어 1,5,10,4,1,21, 5, 10, 4, 1, 2를 만들고, 합은 2323이다. 세 번째 명령은 네 번째 원소를 44로 바꾼다. 이미 44이므로 수열은 바뀌지 않고 합은 2323으로 그대로이다. 네 번째 명령은 수열을 1칸 이동하여 2,1,5,10,4,12, 1, 5, 10, 4, 1을 만들며, 합은 변하지 않는다. 다섯 번째 명령은 첫 번째 원소를 −10-10으로 바꾸어 −10,1,5,10,4,1-10, 1, 5, 10, 4, 1을 만들고, 합은 −10+1+5+10+4+1=11-10 + 1 + 5 + 10 + 4 + 1 = 11이다.

예제2

  1. 예제 1

    입력
    6
    4 1 2 1 5 3
    5
    2 3
    1 3 10
    1 4 4
    2 1
    1 1 -10
    
    예상 출력
    16
    23
    23
    23
    11
    
  2. 예제 2

    입력
    3
    1000000000 1000000000 1000000000
    3
    1 2 999999999
    2 2
    1 2 999999999
    
    예상 출력
    2999999999
    2999999999
    2999999998