题库练习 Odd Queries on Odd Array
← 上一题 下一题 →

A16658 | Odd Queries on Odd Array

时间限制1s
内存限制256MB
通过 / 提交0/0

题目描述

一个长度为 $m$ 的数组 $b$ 被称为可爱数组(cute),如果不存在四个下标 $1\le i < j < k < l \le m$,使得 $b_i\neq b_j$,$b_i = b_k$,并且 $b_j = b_l$。

我们定义长度为 $m$ 的数组 $b$ 的美丽值(beauty)为所有在 $b$ 中出现奇数次的不同数的和。形式化地,设 $\operatorname{cnt}(b, x)$ 表示 $x$ 在数组 $b$ 中出现的次数。那么,美丽值为
$$ \sum\limits_{\substack{x\in \mathbb{Z}\\\operatorname{cnt}(b, x)\text{ 为奇数}}} x. $$

给定一个长度为 $n$ 的可爱数组 $a$,你需要在线回答 $q$ 个查询。每个查询包含两个整数 $l$ 和 $r$($1\le l \le r \le n$),你需要计算子数组 $a_{l\ldots r}$ 的美丽值$^{\text{∗}}$。注意,查询是经过编码的,需要在得到前一个查询答案后才能解码下一个查询。

$^{\text{∗}}$ 子数组 $a_{l \ldots r}$ 指的是数组 $a$ 从第 $l$ 个元素到第 $r$ 个元素的连续区间,即 $[a_l, a_{l+1}, \ldots, a_r]$。

输入格式

每组测试数据包含多个测试用例。第一行包含测试用例个数 $t$($1 \le t \le 10^4$)。每个测试用例的描述如下:

每个测试用例第一行包含两个整数 $n$ 和 $q$($1\le n,q\le 5\cdot 10^5$),分别表示数组 $a$ 的长度和查询的个数。

第二行包含 $n$ 个整数 $a_1, a_2, \ldots, a_n$($1\le a_i\le n$),为可爱数组 $a$ 的元素。

接下来 $q$ 行,每行包含两个整数 $x'_i$ 和 $y'_i$($1\le x'_i, y'_i\le n$),表示查询的区间端点(已编码)。

设 $\text{ans}_i$ 为第 $i$ 个查询的答案,$\text{ans}_0 = 0$。则 $x_i = ((x'_i - 1 + \text{ans}_{i - 1}) \bmod n) + 1$,$y_i = ((y'_i - 1 + \text{ans}_{i - 1}) \bmod n) + 1$。查询子数组的端点 $l_i$ 和 $r_i$ 解码为 $l_i = \min(x_i, y_i)$,$r_i = \max(x_i, y_i)$。

保证给定的数组 $a$ 满足可爱数组的条件。

保证所有测试用例的 $\sum n$ 和 $\sum q$ 不超过 $5\cdot 10^5$。

输出格式

每个测试用例输出 $q$ 个整数,分别为每个查询的答案。

输入输出样例

输入 #1
3
11 4
1 1 2 2 3 3 3 2 2 1 1
7 10
5 11
8 6
2 8
6 2
1 3 2 3 4 3
1 6
1 4
3 6
3 3 3
1 1
1 2
3 1
2 2
2 3
3 3
输出 #1
4 5 4 0 
10 6 
3 0 3 3 0 3
C++ 编辑器
输入
输出