수열 회전과 쿼리

면접 대비

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

요약
수열을 오른쪽이나 왼쪽으로 회전시키는 쿼리와 구간 합을 구하는 쿼리를 처리한다. 회전은 시작 위치만 바꾼다.
난이도

보통10점 중 6점

유형
누적 합, 배열, 구현, 수학
정답자
아직 제출이 없습니다

문제

길이가 NN인 정수 수열 \[A_1,A_2,…,A_N]\[A\_1,A\_2,\dots,A\_N]이 주어진다. 이때 다음 쿼리를 수행하는 프로그램을 작성해보자.

  • 11 kk: 수열을 오른쪽으로 kk만큼 회전시킨다. 즉, A_1A\_1의 값은 A_N−k+1A\_{N-k+1}, A_2A\_2의 값은 A_N−k+2A\_{N-k+2}, …\dots, A_kA\_k의 값은 A_NA\_N, A_k+1A\_{k+1}의 값은 A_1A\_1, A_k+2A\_{k+2}의 값은 A_2A\_2, …\dots, A_NA\_N의 값은 A_N−kA\_{N-k}로 동시에 변한다.
  • 22 kk: 수열을 왼쪽으로 kk만큼 회전시킨다. 즉, A_1A\_1의 값은 A_k+1A\_{k+1}, A_2A\_2의 값은 A_k+2A\_{k+2}, …\dots, A_N−kA\_{N-k}의 값은 A_NA\_N, A_N−k+1A\_{N-k+1}의 값은 A_1A\_1, A_N−k+2A\_{N-k+2}의 값은 A_2A\_2, …\dots, A_NA\_N의 값은 A_kA\_k로 동시에 변한다.
  • 33 aa bb: 수열의 aa번째 수부터 bb번째 수의 합을 출력한다. 즉, ∑_i=abA_i\sum\_{i=a}^b A\_i를 출력한다.

입력

첫 번째 줄에 수열의 길이 NN과 쿼리의 수 QQ가 공백으로 구분되어 주어진다.

두 번째 줄에 NN개의 정수 A_1,A_2,…,A_NA\_1,A\_2,\dots,A\_N이 공백으로 구분되어 주어진다.

세 번째 줄부터 QQ개의 줄에 걸쳐 쿼리가 한 줄에 하나씩 주어진다.

출력

33번 쿼리에 대한 결괏값을 한 줄에 하나씩 입력으로 주어진 순서대로 출력한다.

제한

  • 2≤N≤200,0002 \le N \le 200\\,000
  • 1≤Q≤200,0001 \le Q \le 200\\,000
  • 1≤A_i≤1091 \le A\_i \le 10^9
  • 1≤k≤N1 \le k \le N
  • 1≤a≤b≤N1 \le a \le b \le N
  • 입력으로 주어지는 모든 수는 정수이다.
  • 33번 쿼리는 한 번 이상 주어진다.

예제1

  1. 예제 1

    입력
    7 5
    3 2 1 5 10 6 2
    3 1 3
    2 1
    3 1 3
    1 3
    3 2 6
    
    예상 출력
    6
    8
    13