题意
给定长度为 nnn 的正整数数组 aaa,复制数组排序得到升序数组 bbb。
mmm 次区间查询,每次给 ttt、lll、rrr:
∘\circ∘ t=1t=1t=1:输出原数组 aaa 中 [l,r][l,r][l,r] 区间和
∘\circ∘ t=2t=2t=2:输出排序后数组 bbb 中 [l,r][l,r][l,r] 区间和
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
思路
1.1.1. 读取原数组 aaa,同步计算原数组前缀和 uuu(u[i]u [i]u[i] 代表 aaa 前 iii 项总和)。
2.2.2. 使用 sort 将数组 aaa 升序排序,计算排序数组前缀和 vvv(v[i]v [i]v[i] 代表 bbb 前 iii 项总和)。
3.3.3. 处理 mmm 次询问:
\quad t=1t=1t=1: u[r]−u[l−1]u [r] - u [l-1]u[r]−u[l−1]
\quad t=2t=2t=2: v[r]−v[l−1]v [r] - v [l-1]v[r]−v[l−1]
注意:数值可能溢出,使用 long long 存储数组与前缀和。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
完整代码