#P15094. [UOI 2025 II Stage] Three Queries

[UOI 2025 II Stage] Three Queries

说明

给定一个长度为 nn 的数组 aaqq 个查询。我们还有一个无限长的二进制数组 ww,初始时所有 wi=1w_i = 1

共有三种类型的查询:

  • 1 x1 \ x —— 切换 wxw_x 的值(从 11 变为 00,或从 00 变为 11)。
  • 2 l r2 \ l \ r —— 统计数组 aa 中,满足 wai=1w_{a_i} = 1lirl \le i \le r 的不同数字的数量。
  • 3 x t3 \ x \ t —— 将 axa_x 的值赋为 tt

请对每个第二类查询给出答案。

输入格式

  • 第一行包含两个整数 nnqq1n,q31051 \le n, q \le 3\cdot10^5)——数组的长度和查询的数量。
  • 第二行包含 nn 个整数 a1,a2,,ana_1, a_2, \dots, a_n1ai1091 \le a_i \le 10^9)——数组元素的值。
  • 接下来的 qq 行,每行以一个整数 typetype1type31 \le type \le 3)开头,表示查询的类型:
    • 如果 type=1type = 1,查询包含一个整数 xx1x1091 \le x \le 10^9)——切换 wxw_x 的值。
    • 如果 type=2type = 2,查询包含两个整数 llrr1lrn1 \le l \le r \le n)——统计数组 aa 在区间 [l,r][l, r] 中,满足 wai=1w_{a_i} = 1lirl \le i \le r 的不同数字的数量。
    • 如果 type=3type = 3,查询包含两个整数 xxtt1xn,1t1091 \le x \le n, 1 \le t \le 10^9)——将 axa_x 的值替换为 tt

输出格式

对于每个第二类查询,在单独一行输出区间内满足条件的不同数字的数量。

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
2
1
2

提示

在示例的第一个第二类查询中,区间为 [4,3,4,3][4, 3, 4, 3],其中包含数字 3344,且 w3w_3w4w_4 均为 11,因此答案为 22。执行下一个类型 11 的查询后,w3w_3 变为 00,因此对于下一个查询,答案为 11。执行下一个查询后,数组变为 [3,4,3,5,3,2,3,1,2,1][3, 4, 3, 5, 3, 2, 3, 1, 2, 1]。在最后一个查询中,区间为 [4,3,5,3][4, 3, 5, 3],包含数字 3,4,53, 4, 5,但 w3=0w_3 = 0,因此答案为 22

评分细则

  • 88 分):n,q103n, q \le 10^3
  • 66 分):仅包含类型 22 的查询;n=qn = qli=1l_i = 1ri=ir_i = i
  • 1313 分):仅包含类型 22 的查询;
  • 1010 分):仅包含类型 1122 的查询;所有 aia_i 互不相同;
  • 1414 分):仅包含类型 1122 的查询;所有 waiw_{a_i} 只能改变一次;
  • 77 分):仅包含类型 1122 的查询;
  • 1414 分):仅包含类型 2233 的查询;
  • 88 分):任何时刻 ai100a_i \le 100
  • 1010 分):n,q5104n, q \le 5\cdot10^4
  • 1010 分):无额外限制。

翻译由 DeepSeek V3 完成