问题3057-- 前缀和 —— 菜姬的算法小课堂

3057: 前缀和 —— 菜姬的算法小课堂

时间限制: 1 Sec  内存限制: 128 MB
提交: 311  解决: 216
[状态] [讨论版] [提交] [命题人:]
题目描述

菜姬的算法小课堂开课了!!!今天,菜姬老师给大家讲的内容是“前缀和”。

"前缀和" 的定义:数列的前 n 项的和。

前缀和是一种重要的预处理,能大大降低查询的时间复杂度。 我们可以简单理解为 "数列的前 n 项的和"。 这个概念其实很容易理解,即一个前缀和数组中,第 n 位存储的是原数组前 n 个数字的和。

在这里我默认大家对高中的数学基本知识还有印象,那么前缀和以高中学的数列来表示就是 

当然,在编程里我们不需要记忆什么求和公式,而且基本上所有前缀和(一维)的求解形式都是一样的。

形式来讲,假如我们有一个长度为 n 的数组 a,数组 a 的每一项都有一个初始值,那么求解这个数组的前缀和方式为:

使用 for 循环从前往后遍历,对于当前下标 x,我们需要进行 a[x] += a[x - 1] 操作,这样循环下来就能取得数组的前缀和数组,通俗来说对于一个初始的数组,如果我们需要求解前缀和数组第 x 项,那么这个第 x 项显然值为原数组 a 的前 x 项和,即我们求解时可以用原数组 ax - 1 项和加上我们 a 数组第 x 项。

当然以上求出的前缀和数组会覆盖原数组 a,如果大家想保留原数组我们可以用新数组 S 代表前缀和数组。同理,求解 S 的方式类似,我们只需要令 S[x] = S[x - 1] + a[x],需要注意的是 S= a1

总而言之,本节并不是想让大家具体掌握前缀和知识,只是想提前让大家了解一下。因此,我们的问题相对来说会很简单。那么来让我们练练手吧:

假设我们有一个长度为 n 的数组,请求出数组的前缀和数组,并输出每一项。

输入

第一行输入一个 n ( 1 ≤ n ≤ 105 )

接下来有 n 行,每一行输入一个整数 ai

保证 

输出
输出 n 行,第 i 行输出前缀和数组第 i 项。
样例输入 Copy
4
1
1
1
1
样例输出 Copy
1
2
3
4
提示
本题实现难度非常简单,前缀和的概念也不是很复杂,如若不懂,可自行百度。