#565. 猫娘的咒语

传统 2000 ms 256 MiB
标准 IO
文本比较 huan_yp

题目描述

众所周知,Lambda是一名可爱的猫娘魔法少女,她会很多很多的法术。

image-20250512150956944

Lambda生成了一个长度为 nn 的序列。

因为只有一个序列不够她练习,所以在接下来的 mm 秒里,她要么会思考一个问题,要么会再念出一段咒语。

询问有一种:

  • 询问区间 [l,r][l,r] 中等于 xx 的数有多少个。

咒语有两种:

  • 第一种咒语:将区间 [l,r][l,r] 中所有的 xx 更改为 yy

  • 第二种咒语:将区间 [l,r][l,r] 上所有的数加上 xx

虽然Lambda擅长魔法,但她并不擅长计算,于是就只好向你请教询问,你需要回答Lambda的每一个询问,否则魔法少女生气的后果是很严重的。

输入格式

第一行两个数 n,mn,m,表示序列长度和时间。

第二行 nn 个数,给出Lambda生成的序列 aa

接下来 mm 行,每行的第一个数 opop 表示类型:

  • op=0op=0,那么接下来输入 l,r,xl,r,x ,表示询问的参数。
  • op=1op=1 接下来输入 l,r,x,yl,r,x,y 表示第一种咒语的参数。
  • op=2op=2 接下来输入 l,r,xl,r,x,表示第二种咒语的参数。

输出格式

对于每个询问,你需要在单独的一行输出这个询问的答案。

样例

输入 #1

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

输出 #1

1
2
2

解释 #1

  • 第一秒,询问 [1,2][1, 2]11 的数量,序列为 1,4,51, 4, 5,询问区间为 1,41,4,答案为 11
  • 第二秒,把 [2,3][2,3] 中所有 44 改为 11,序列变为 1,1,51,1,5
  • 第三秒,询问 [1,2][1, 2]11 的数量,序列为 1,1,51, 1, 5,询问区间为 1,11,1, 答案为 22
  • 第四秒,把 [1,3][1,3] 中所有数加上 44,序列变为 5,5,95,5,9
  • 第五秒,询问 [1,3][1, 3]55 的数量,序列为 5,5,95, 5, 9,询问区间为 5,5,95,5,9,答案为 22

数据范围与提示

对于所有数据 1n,m,ai,y105,1lrn,0x1051\le n,m,a_i,y\leq10^5,1\leq l\leq r\leq n, 0\le|x|\le10^5。并且保证任何时候 1ai1051\leq a_i\leq 10^5