#49. 数组学习检验 array

内存限制:256 MiB 时间限制:1000 ms 标准输入输出
题目类型:传统 评测方式:文本比较
上传者: WendyAsif

题目描述

到了期末的时候了,也就是到了检验学期学习成果的时候了。作为学习编程的第一学期,肯定学习了数组。

于是,这一题是与数组有关的内容。

老师首先给了同学们一个长度为 的数组 ,然后会询问一些关于数组的问题:值为 的数在数组中出现了几次。为了让这个过程不至于太枯燥,于是,老师也做一些修改或者删除操作。

现在你需要回答其中的所有询问。

形式化的说,本题为首先给定一个长度为 的数组 。然后进行 次操作:

操作共有 4 种类型,每一个操作首先会说明所属类型。

  • 类型1 ,会额外给出一个数 ,表示询问 的出现次数。
  • 类型2 ,会额外给出一个数 ,表示删除数组中所有的出现
  • 类型3,会额外给出两个数 ,表示把数组中出现的所有 改为 。如果 没有出现,不用执行任何操作。
  • 类型4,会额外给出两个数 ,表示把数组中,值在 中间的数全部删除。

注意,删除、修改操作永久有效,即删除、修改操作会改变 数组。详见样例解释

输入格式

输入数据共包含 行。

第一行两个整数, 分别表示初始状态数组长度和询问次数

接下来 行,每行表示一个操作,每行第一个数 表示询问的类型。

  • 如果 ,则该行还有一个数 ,表示询问 的出现次数。

  • 如果 ,则该行还有一个数 ,表示删除数组中出现的所有

  • 如果 ,则该行还有两个数 表示表示把数组中出现的所有 改为

  • 如果 ,则该行还有两个数 表示把数组中,值在 中间的数全部删除。

输出格式

输出若干行。

对于每个类型为 的操作,输出一行一个整数表示答案。

样例

样例 #1

样例输入 #1

5 5
1 2 3 4 5
1 1
2 3
3 5 2
4 3 4
1 2

样例输出 #1

1
2

样例解释 #1

初始数组为

对于第 1 个操作,询问 1 的出现次数,输出 1 。

对于第 2 个操作,删除 3 ,数组变为

对于第 3 个操作,将 5 变为 2 ,数组变为

对于第 4 个操作,删除值在 的数,数组变为

对于第 5 个操作,询问 2 的出现次数,输出 2 。

数据范围与提示

数据范围与提示

对于所有测试点,都有 任意

测试点编号 特殊性质
1-4 所有操作都有,但保证
5-8 询问只有类型1,并且任意
9-12 所有操作都有,但任意时刻,数组中数的最大值 内。
13-20 无任何特殊性质。