새로운 배열 게임

시간 제한2초메모리 제한128 MB

요약
최대 10만 개 원소 배열에서 구간 좌우 회전과 위치 조회 쿼리를 최대 10만 번 효율적으로 처리해야 합니다.
난이도

보통10점 중 6점

유형
세그먼트 트리, 배열, 구현
정답자
아직 제출이 없습니다

문제

서로 다른 양의 정수 N개가 배열에 놓여 있다. 각 정수는 1 이상 N 이하이다.

다음 세 가지 명령을 처리해야 한다.

  1. L a b k: a번째부터 b번째까지의 구간을 왼쪽으로 k번 회전한다.
  2. R a b k: a번째부터 b번째까지의 구간을 오른쪽으로 k번 회전한다.
  3. P x: 현재 배열의 x번째 값을 출력한다.

예를 들어 (5, 1, 8, 3)을 왼쪽으로 한 번 회전하면 (1, 8, 3, 5)가 되고, 오른쪽으로 한 번 회전하면 (3, 5, 1, 8)이 된다.

회전 명령은 1 ≤ a < b ≤ N, 1 ≤ k < b-a+1을 만족한다. P x 명령이 주어질 때마다 답을 출력하라.

입력

첫째 줄에 정수의 개수 N (2 ≤ N ≤ 100,000)과 명령의 개수 Q (1 ≤ Q ≤ 100,000)가 주어진다.

둘째 줄에는 초기 배열에 들어 있는 N개의 양의 정수가 주어진다.

다음 Q개 줄에는 위에서 설명한 형식의 명령이 하나씩 주어진다.

출력

P x 명령마다 현재 x번째 위치에 있는 값을 한 줄에 하나씩 출력한다.

예제2

  1. 예제 1

    입력
    7 5
    7 5 3 1 4 2 6
    L 1 3 2
    R 2 4 1
    P 1
    P 4
    P 7
    
    예상 출력
    3
    5
    6
    
  2. 예제 2

    입력
    5 5
    3 5 4 2 1
    R 3 5 1
    R 1 4 1
    P 1
    R 1 5 4
    P 1
    
    예상 출력
    4
    3