题目描述
给定一个长度为 n 的数组 a,以及 q 个询问。另有一个无限长的二进制数组 w,初始时所有 wi=1。
询问共有三种类型:
1 x:翻转 wx 的值,即从 1 变为 0,或从 0 变为 1。
2 l r:统计数组 a 的区间 [l,r] 中,有多少个不同的数满足 wai=1 且 l≤i≤r。
3 x t:将 ax 赋值为 t。
请对每个第二类询问输出答案。
输入格式
第一行包含两个整数 n,q(1≤n,q≤3⋅105),分别表示数组长度和询问数量。
第二行包含 n 个整数 a1,a2,…,an(1≤ai≤109),表示数组初始值。
接下来 q 行,每行首先包含一个整数 type(1≤type≤3),表示询问类型:
- 若 type=1,则该询问还包含一个整数 x(1≤x≤109),表示翻转 wx。
- 若 type=2,则该询问还包含两个整数 l,r(1≤l≤r≤n),表示询问区间 [l,r] 中满足条件的不同数的数量。
- 若 type=3,则该询问还包含两个整数 x,t(1≤x≤n,1≤t≤109),表示把 ax 改为 t。
输出格式
对于每个第二类询问,单独输出一行答案。
输入 #1
10 5
3 4 3 4 3 2 3 1 2 1
2 2 5
1 3
2 2 5
3 4 5
2 2 5
输出 #1
2
1
2
评分方式
测试点分组如下:
- 8 分:n,q≤103;
- 6 分:只有第二类询问,且 n=q,li=1,ri=i;
- 13 分:只有第二类询问;
- 10 分:只有第一类和第二类询问,且所有 ai 两两不同;
- 14 分:只有第一类和第二类询问,且所有 wai 至多改变一次;
- 7 分:只有第一类和第二类询问;
- 14 分:只有第二类和第三类询问;
- 8 分:任意时刻都有 ai≤100;
- 10 分:n,q≤5⋅104;
- 10 分:无额外限制。