解题思路
给定原数组 a 和重复次数数组 b,新数组 a' 是把 a_i 连续复制 b_i 次拼接而成。a' 的长度可能非常大(可达 ∑b_i),不能直接构造。
核心做法:前缀和 + 二分定位块。
-
预处理两条前缀数组
- 位置前缀(块边界):
prefB[i] = b_1 + b_2 + … + b_i。它表示在新数组 a' 中,第 i 个数所对应的“块”的右端位置。
据此,对任意位置 p,用二分(lower_bound)找到最小的 i 使 prefB[i] ≥ p,即可定位 p 属于的块下标 i。
P3762.第1题-区间和
题目内容
你有两个长度为 n 的数组 a 和 b ,数组 a 中每个元素 ai 复制 bi 次后,可以得到新数组 a′ 。例如,假设 a=[8,9,7,5,7],b=[1,2,2,1,3] ,则新数组 a′=[8,9,9,7,7,5,7,7,7] 。
你需要回答 q 次询问,其中第 i 次询问会给出两个参数 li 和 ri,你需要计算新数组 a′ 中下标在 [li,ri] 范围内所有元素的和。