변형된 회전하는 큐

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

요약
변형된 양방향 큐에서 회전, 특정 원소 기준 좌우 교환, 원소 뽑기 쿼리를 처리하고 뽑힌 원소를 순서대로 출력한다.
난이도

어려움10점 중 8점

유형
연결 리스트, 시뮬레이션, 구현
정답자
아직 제출이 없습니다

문제

서로 다른 양의 정수 NN개 a_1,a_2,⋯ ,a_Na\_1, a\_2, \cdots, a\_N을 담고 있는 변형된 양방향 큐가 있다. 변형된 양방향 큐 내에서 실행되는 쿼리가 다음과 같이 주어진다.

  • SF: 큐의 첫 번째 원소를 마지막으로 옮긴다. 이 쿼리를 수행하면 큐의 상태가 원래 b_1,b_2,⋯ ,b_Mb\_1, b\_2, \cdots, b\_M이었던 것이 b_2,⋯ ,b_M,b_1b\_2, \cdots, b\_M, b\_1로 바뀐다.
  • SL: 큐의 마지막 원소를 첫 위치로 옮긴다. 이 쿼리를 수행하면 큐의 상태가 원래 b_1,⋯ ,b_M−1,b_Mb\_1, \cdots, b\_{M-1}, b\_M이었던 것이 b_M,b_1,⋯ ,b_M−1b\_M, b\_1, \cdots, b\_{M-1}로 바뀐다.
  • SM xx: 큐에 포함된 원소 xx를 기준으로, xx의 왼쪽과 오른쪽에 있는 원소들을 서로 맞바꾼다. 이 쿼리를 수행하면 큐의 상태가 원래 b_1,⋯ ,b_i−1,x,b_i+1,⋯ ,b_Mb\_1, \cdots, b\_{i-1}, x, b\_{i+1}, \cdots, b\_M이었던 것이 b_i+1,⋯ ,b_M,x,b_1,⋯ ,b_i−1b\_{i+1}, \cdots, b\_M, x, b\_1, \cdots, b\_{i-1}로 바뀐다.
  • PF: 큐의 첫 번째 원소를 뽑아낸다. 이 쿼리를 수행하면 큐의 상태가 원래 b_1,b_2,⋯ ,b_Mb\_1, b\_2, \cdots, b\_M이었던 것이 b_2,⋯ ,b_Mb\_2, \cdots, b\_M로 바뀐다.
  • PL: 큐의 마지막 원소를 뽑아낸다. 이 쿼리를 수행하면 큐의 상태가 원래 b_1,⋯ ,b_M−1,b_Mb\_1, \cdots, b\_{M-1}, b\_M이었던 것이 b_1,⋯ ,b_M−1b\_1, \cdots, b\_{M-1}로 바뀐다.
  • PM xx: 큐에 포함된 원소 xx를 뽑아낸다. 이 쿼리를 수행하면 큐의 상태가 원래 b_1,⋯ ,b_i−1,x,b_i+1,⋯ ,b_Mb\_1, \cdots, b\_{i-1}, x, b\_{i+1}, \cdots, b\_M이었던 것이 b_1,⋯ ,b_i−1,b_i+1,⋯ ,b_Mb\_1, \cdots, b\_{i-1}, b\_{i+1}, \cdots, b\_M로 바뀐다.

큐 내의 모든 원소들을 뽑아내도록 쿼리가 주어진다. 주어진 모든 쿼리를 수행하고 난 뒤, 큐에서 뽑아낸 원소들을 순서대로 출력하는 프로그램을 작성하여라.

입력

첫째 줄에 변형된 양방향 큐에 초기에 포함된 원소 개수 NN이 주어진다. (1≤N≤300 000)(1 \le N \le 300\ 000)

둘째 줄에 서로 다른 양의 정수 a_1,a_2,⋯ ,a_Na\_1, a\_2, \cdots, a\_N이 공백으로 구분되어 주어진다. (1≤a_i≤N)(1 \le a\_i \le N)

셋째 줄에 쿼리의 개수 QQ가 주어진다. (N≤Q≤600 000)(N \le Q \le 600\ 000)

넷째 줄부터 QQ개의 줄에 걸쳐 각 쿼리에 대한 입력이 주어진다.

큐 내의 모든 원소들을 뽑아내도록 쿼리가 주어지는 것이 보장되며, SM과 PM 쿼리가 주어질 때 원소 xx는 큐 내에 반드시 포함됨도 보장된다.

출력

주어진 모든 쿼리를 수행하고 난 뒤, 큐에서 뽑아낸 원소들을 공백으로 구분하여 순서대로 출력한다.

예제1

  1. 예제 1

    입력
    5
    1 5 2 4 3
    10
    SM 5
    PF
    SL
    PL
    SF
    PM 3
    SF
    PL
    PF
    SL
    
    예상 출력
    2 5 3 4 1