수열과 시프트 쿼리
면접 대비시간 제한1초메모리 제한256 MB
수열에서 한 원소에 값을 더하는 연산과 수열을 오른쪽이나 왼쪽으로 s칸 회전하는 연산을 순서대로 처리한 뒤 최종 수열을 출력한다.
문제
길이가 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