소각로

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

요약
폐기물 큐와 M개의 소각로 칸을 두고 소각, 조회, 추가, 재활용 명령을 처리한 뒤 마지막 칸 상태를 출력한다.
난이도

보통10점 중 7점

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

문제

종영이는 종류가 11부터 KK까지 번호가 붙은 쓰레기 NN개를 순서대로 태우려고 한다. 쓰레기의 종류를 순서대로 나열한 수열을 A1,A2,…,ANA_1, A_2, \dots, A_N이라 하자. 태워야 할 쓰레기가 나중에 대기열의 뒤에 추가될 수도 있다.

소각로에는 11번부터 MM번까지 번호가 붙은 칸 MM개가 일렬로 있다. 처음에는 대기열 앞에서부터 min⁡(N,M)\min(N, M)개를 꺼내어 11번 칸부터 순서대로 놓는다. N<MN < M이면 오른쪽 칸은 비어 있다.

소각 작업은 연속된 구간 [L,R][L, R] (L≤RL \le R)에 있는 쓰레기를 한 번에 태우는 것이다. 태운 뒤 빈 칸 [L,R][L, R]을 대기열 앞에서부터 순서대로 꺼내어 LL번 칸부터 순서대로 채운다. 대기열이 먼저 바닥나면 남은 칸은 비워 둔다.

다음 네 가지 명령을 모두 QQ번 수행하는 프로그램을 작성하라.

  • 소각로의 구간 [L,R][L, R]에 소각 작업을 진행한다.
  • 소각로 ii번 칸에 놓인 쓰레기의 종류를 출력한다.
  • 종류가 pp인 쓰레기 qq개를 현재 대기열의 뒤에 넣는다.
  • 재활용을 위해 현재 대기열 맨 앞의 쓰레기 tt개를 제거한다.

모든 명령을 수행한 뒤에는 현재 소각로의 상태도 출력해야 한다.

입력

첫째 줄에 N,M,K,QN, M, K, Q가 순서대로 주어진다. (1≤N,M,K,Q≤5×1051 \le N, M, K, Q \le 5 \times 10^5)

둘째 줄에 NN개의 정수 A1,A2,…,ANA_1, A_2, \dots, A_N이 주어진다. (1≤Ai≤K1 \le A_i \le K)

이어지는 QQ개의 줄에는 명령이 하나씩 주어진다. 각 줄은 명령의 종류를 나타내는 정수 oo로 시작한다. (1≤o≤41 \le o \le 4)

  • o=1o = 1이면 첫째 명령이며, LL과 RR이 뒤따른다. (1≤L≤R≤M1 \le L \le R \le M)
  • o=2o = 2이면 둘째 명령이며, ii가 뒤따른다. (1≤i≤M1 \le i \le M)
  • o=3o = 3이면 셋째 명령이며, pp와 qq가 뒤따른다. (1≤p≤K1 \le p \le K, 1≤q≤1061 \le q \le 10^6)
  • o=4o = 4이면 넷째 명령이며, tt가 뒤따른다. (1≤t≤1 \le t \le 현재 대기열에 있는 쓰레기의 개수)

둘째 명령은 한 번 이상 주어짐이 보장된다.

출력

첫째 줄에 둘째 명령에 대한 답을 모두 순서대로 공백으로 구분하여 출력한다. 둘째 줄에 모든 명령을 수행한 뒤 소각로에 남은 쓰레기의 종류를 11번 칸부터 MM번 칸까지 순서대로 공백으로 구분하여 출력한다. 빈 칸은 00으로 출력한다.

예제3

  1. 예제 1

    입력
    10 3 100 7
    1 2 3 4 5 7 7 8 9 10
    1 1 3
    4 4
    3 100 1000000
    4 999999
    2 2
    1 1 3
    2 2
    예상 출력
    5 0
    100 0 0
  2. 예제 2

    입력
    1 1 1 1
    1
    2 1
    예상 출력
    1
    1
  3. 예제 3

    입력
    10 10 500000 8
    1 2 3 4 5 6 7 8 9 10
    1 1 10
    3 314159 10
    1 1 10
    1 2 4
    1 7 9
    2 5
    3 500000 6
    1 2 8
    예상 출력
    314159
    314159 500000 500000 500000 500000 500000 500000 0 0 314159