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

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

时间限制: 1Sec 内存限制: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],需要注意的是S1= a1

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

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

输入

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

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

保证

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