📌  相关文章
📜  为 K 个查询查找数组中所有唯一元素的总和(1)

📅  最后修改于: 2023-12-03 15:35:57.633000             🧑  作者: Mango

为 K 个查询查找数组中所有唯一元素的总和

在一个数组中,如果一个元素只出现了一次,我们就称其为唯一元素。现在我们有一个长度为 n 的数组,以及 k 个查询。每个查询给出了左右端点,你需要找到这个区间中所有出现次数为 1 的元素的总和。

输入格式

第一行包含两个整数 n 和 k,表示数组长度和查询个数。

第二行包含 n 个整数(均在 0~100 范围内),表示完整的数组。

接下来 k 行,每行两个整数 l 和 r,表示一个询问的左右端点。

输出格式

共 k 行,每行一个整数,表示询问中所有唯一元素的总和。

数据范围

1 ≤ n ≤ 100000

1 ≤ k ≤ 100000

示例

输入:

5 2
1 1 2 3 2
1 3
2 4

输出:

4
3
解题思路

本题的目标是查询一个区间内所有只出现一次的数的总和,如果直接暴力处理,时间复杂度将达到 $O(n*k)$,显然无法承受。因此我们需要想办法降低时间复杂度。

由于每个数的取值范围很小(0~100),因此我们可以想到可以对每个数进行离散化,使得每个数都只有一个对应的下标值。然后我们再遍历整个数组,统计各个数的出现次数。最后再根据查询区间的范围,来求出查询区间内所有只出现过一次的数的总和。

具体实现请参考下方的Python3代码: