跳转至

这题是你自己出的

时间限制:1.5 秒。内存限制:128 MiB。参考 评测环境与性能。

背景故事

这题明明是你自己出的,但现在完全不会做了。

形式化问题描述

给定长度为 \(n\) 的整数序列 \(a\) ,依次处理 \(m\) 个操作。解密后的操作为:

  • 1 x v :令 \(a_x=v\) .
  • 2 l_1 r_1 l_2 r_2 :输出满足 \(l_1\le x\le r_1\) 、\(l_2\le y\le r_2\) 且 \(a_x=a_y\) 的有序对 \((x,y)\) 数量。区间可以重叠,\(x=y\) 合法;两个方向分别计数。

令 last 为最近一次查询的答案,初始为零;修改操作不改变 last .操作行中的所有整数,包括操作类型都按下列方式编码:把实际整数 \(z\) 化为 \(z\bmod2^{64}\) 的非负余数,再与 last 做64位按位异或,输出结果的无符号十进制表示。

解码后,操作类型和下标直接作为非负整数。修改值的解码位串若小于 \(2^{63}\) ,其值不变;否则减去 \(2^{64}\) 得到负数。前两行的 \(n,m\) 和初始序列不编码。保证解密后的操作合法。

输入格式

第一行包含未编码的 n m .第二行包含 \(n\) 个未编码的有符号整数 \(a_i\) .接下来 \(m\) 行为编码后的操作;先解码类型,再确定该行还有2个或4个参数。所有编码字段在 \([0,2^{64}-1]\) 内。

输出格式

每个查询输出一行一个未编码的整数答案。答案可达到 \(n^2\) ,请使用64位整数。

样例 1

输入

4 4
-1 2 -1 2
2 1 4 1 4
9 10 18446744073709551607
10 9 11 10 12
4 4 4 4 4

输出

8
6
1

样例 2

输入

1 3
1000000000
2 1 1 1 1
0 0 18446744072709551617
3 0 0 0 0

输出

1
1

样例解释

样例1的明文操作依次是 (2,1,4,1,4) 、(1,2,-1) 、(2,1,3,2,4) 、(2,2,2,2,2) .首个答案为8,修改后,区间 \([1,3]\) 与 \([2,4]\) 的查询答案为6,单点与自身配对的答案为1。

两个区间可以重叠。以值分组后,各值在两个区间中的出现次数相乘,再求和。

两个区间可以重叠。以值分组后,各值在两个区间中的出现次数相乘,再求和。

数据范围与保证

\(1\le n\le10^5\) ,\(1\le m\le10^4\) ,\(|a_i|,|v|\le10^9\) ,\(1\le x\le n\) ,\(1\le l_j\le r_j\le n\) .这些范围均指实际值。

规格重新设计:Codex(GPT-6);补上初始数组输入,确定全部操作字段加密及有符号值的64位编码,固定规模。

分值 额外限制
20% \(n\le50,\ m\le100\)
30% \(n,m\le2000\)
50% 无额外限制