- 博客(6)
- 收藏
- 关注
原创 离散化算法(c++)(自用)
例如,{400,5000,1,3000,200}通过离散化我们将其变为{3,5,1,4,2}.也就是说离散化,把无限空间中有限的个体映射到有限的空间中去,以此提高算法的时空效率。接下来,进行 m 次询问,每个询问包含两个整数l和r,你需要求出在区间[l, r]之间的所有数的和。由于r和l的范围较大,而n和m的范围较小即为调用的数字较少,所以我们可以将其离散化,缩短数周的空间,将其离散化。我们将l和r的大小范围看成数轴的范围,n和m看成点的坐标。共m行,每行输出一个询问中所求的区间内数字和。
2023-10-11 20:12:30
312
2
原创 树状数组(自用)
例如,索引 6 的二进制表示为 110(从右到左按位编号),那么对应区间的大小为 2,即包括原始数组中的第 6、5 两个元素。其中 sums_[i] 的二进制表示中最低位的 1 对应一个区间的和,而剩下的部分可以用来表示包含第 i 个元素的若干区间的和。在树状数组中,每个索引位置 i 的二进制表示中,最低位的 1 所对应的区间大小就是 i & (-i)。将每个t[x]的x转化为二进制后,我们发现每一层末尾的0的个数相同,0的个数与其覆盖的长度有关。t[x]保存以x为根的子树中叶节点值的和。
2023-10-09 19:50:09
61
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人