수열과 시프트 쿼리

면접 대비

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

요약
수열에서 한 원소에 값을 더하는 연산과 수열을 오른쪽이나 왼쪽으로 s칸 회전하는 연산을 순서대로 처리한 뒤 최종 수열을 출력한다.
난이도

보통10점 중 4점

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

문제

길이가 N인 정수 수열 [a1, a2, ..., aN]이 주어진다. 다음 연산을 모두 수행한 뒤 수열을 출력하는 프로그램을 작성하시오.

  • 1 i x : ai에 정수 x를 더한다.
  • 2 s : 수열을 오른쪽으로 s칸 시프트한다.
  • 3 s : 수열을 왼쪽으로 s칸 시프트한다.

수열을 오른쪽으로 한 칸 시프트하면 [a1, a2, …, aN-1, aN]은 [aN, a1, a2, …, aN-1]이 된다.

수열을 왼쪽으로 한 칸 시프트하면 [a1, a2, …, aN-1, aN]은 [a2, …, aN-1, aN, a1]이 된다.

진수는 시프트 연산마다 반복문을 N번 실행하는 코드를 작성해 제출했고, 시간 초과 판정을 받았다.

입력

첫 번째 줄에 수열의 길이 N (2 ≤ N ≤ 200,000)과 연산의 개수 Q (1 ≤ Q ≤ 200,000)가 주어진다.

두 번째 줄에는 정수 a1, a2, ..., aN (-10,000 ≤ ai ≤ 10,000)이 주어진다.

다음 Q개의 줄에는 각 줄마다 연산이 주어진다.

출력

첫 번째 줄에 Q개의 연산을 차례대로 수행한 후 a1, a2, …, aN을 공백을 사이에 두고 출력한다.

제한

  • 1 ≤ i ≤ N
  • -10,000 ≤ x ≤ 10,000
  • 1 ≤ s ≤ N-1

예제1

  1. 예제 1

    입력
    5 4
    1 2 3 4 5
    1 1 4
    2 3
    1 2 2
    3 1
    
    예상 출력
    6 5 5 2 3