#P16337. [Ucpc2018初赛]焚烧炉

[Ucpc2018初赛]焚烧炉

题目描述

钟荣准备焚烧多种垃圾。垃圾共有 KK 种,依次用整数 1,2,,K1,2,\ldots,K 表示。

最初,队列中有 NN 件等待焚烧的垃圾,它们从队首到队尾的种类依次为

A1,A2,,AN.A_1,A_2,\ldots,A_N.

之后还可能有新的垃圾加入队尾。

焚烧炉由横向排列的 MM 个格子组成,从左到右编号为 1,2,,M1,2,\ldots,M

开始时,从队首依次取出 min(N,M)\min(N,M) 件垃圾,按顺序放入焚烧炉的第 11 到第 min(N,M)\min(N,M) 个格子。若 N<MN<M,右侧的一些格子为空。

一次焚烧操作会同时烧掉区间 [L,R][L,R] 内所有格子中的垃圾。焚烧完成后,这些格子变空;随后从当前队首开始依次取垃圾,按 L,L+1,,RL,L+1,\ldots,R 的顺序填入这些格子。若队列在填满区间之前已经为空,剩余格子保持为空。

你需要依次执行 QQ 条命令。命令共有四种:

  1. 1 L R:对焚烧炉的格子区间 [L,R][L,R] 执行一次焚烧操作;
  2. 2 i:询问焚烧炉第 ii 个格子中垃圾的种类;若该格为空,答案为 00
  3. 3 p q:向当前队尾加入 qq 件种类为 pp 的垃圾;
  4. 4 t:为了回收利用,从当前队首删除 tt 件垃圾。

执行完全部命令后,还需要输出焚烧炉的最终状态。

输入格式

第一行包含四个整数 N,M,K,QN,M,K,Q

第二行包含 NN 个整数

A1,A2,,AN.A_1,A_2,\ldots,A_N.

接下来 QQ 行,每行给出一条命令。命令首先给出类型 oo

  • o=1o=1,随后给出 L,RL,R
  • o=2o=2,随后给出 ii
  • o=3o=3,随后给出 p,qp,q
  • o=4o=4,随后给出 tt

输出格式

第一行按照命令出现的顺序,输出所有类型 22 询问的答案,答案之间用空格分隔。

第二行输出执行完全部命令后焚烧炉从左到右的状态,共 MM 个整数。若某个格子为空,则输出 00

数据范围

1N,M,K,Q5×105,1\le N,M,K,Q\le 5\times10^5, 1AiK,1\le A_i\le K,

对于各种命令:

1LRM,1\le L\le R\le M, 1iM,1\le i\le M, 1pK,1q106,1\le p\le K,\qquad 1\le q\le10^6,

类型 44 命令满足

1t当前队列中的垃圾数量.1\le t\le\text{当前队列中的垃圾数量}.

保证至少出现一次类型 22 命令。

输入

7 4 3 7
1 1 2 3 3 2 1
2 3
1 2 4
3 2 3
2 2
4 1
1 1 2
2 4

输出

2 3 1
2 2 2 1

说明

初始时焚烧炉为 [1,1,2,3][1,1,2,3],队列中剩余 [3,2,1][3,2,1]

  • 第一次询问第 33 格,得到 22
  • 焚烧区间 [2,4][2,4] 后,使用队列中的垃圾补入,焚烧炉变为 [1,3,2,1][1,3,2,1]
  • 向队尾加入三个种类为 22 的垃圾,随后询问第 22 格,得到 33
  • 从队首删除一个垃圾后,焚烧区间 [1,2][1,2],最终焚烧炉为 [2,2,2,1][2,2,2,1]
  • 最后询问第 44 格,得到 11