📅  最后修改于: 2023-12-03 15:35:57.633000             🧑  作者: Mango
在一个数组中,如果一个元素只出现了一次,我们就称其为唯一元素。现在我们有一个长度为 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代码: