前缀和:给重复计算按下暂停
从一排仓库开始,亲手发现一个更快的办法。
建议先掌握:输入输出、循环、数组 · 调整学习起点 →
十万个区间,你会怎么求和?
这不是考试。我们想了解你现在会怎样解决它。
有 100000 个数,需要回答 100000 次区间求和查询。每次给你 l、r,求出第 l 个到第 r 个数的总和。
这里只记录选课起点,不判断对错;选择保存在本浏览器中。
每查一次,就重新加一次?
6 座仓库,分别存着下面这些货物。把每个查询需要读取的数字数一数。
如果把「到这里的总量」记下来……
给每座仓库增加一个记录:从第 1 座到当前仓库的货物总量。我们把它叫作累计量 s[i]。
两笔累计账,相减会发生什么?
我们想求第 2~5 座的总量。s[5] 包含第 1~5 座;减去第 1 座的累计量,就只留下想要的部分。
把你的发现翻译成 C++。
s[i] 表示前 i 个数的总和。求 l~r 的总和,需要去掉 l 之前的所有数。
解法成立,还要照顾边界。
先检查最左边的区间,再检查很大的总和。100000 个数,每个可达 10⁹,累计量也需要可靠的数据类型。
引导实验已完成。
下一步,在没有引导的新题中独立应用。完成引导不等于独立掌握。
选择编程任务 ↓把发现,变成独立解决问题的能力。
你可以先浏览实验内容。登录并验证邮箱后,即可验证答案并保存学习进度。