一维前缀和

article/2025/10/1 21:21:25

今天我们来讲讲一维前缀和

首先我们来介绍一下一维前缀和,emmm其实和数列的前n项和差不多,它能在 O ( 1 ) O(1) O(1) 的时间复杂度操作数组的任意子区间,比如我们要找出一段区间的和。

我们先预处理出一个前缀和数组,为了方便使用,前缀和数组下标从1开始,数组初始化时我们看作原数组是一个元素全为0的数组,这个在输入数据的同时我们就能对其一边输入一边求前缀和,当然要是不能理解,也是可以分步的

前缀和数组我们用s表示,那么 s[1] 的计算就能看成是 s[0] + a[1] ,即起始下标到当前下标的区间前缀和为 s[i - 1] + a[i] 。那么如果我们要求任意一段区间的前缀和呢?其实也很简单,区间 [l , r] 的前缀和为 a[l] + ... + a[r] 等价于 s[r] - s[l - 1]
比如我们要求区间3-5的前缀和,那么其实相当于1-5这个区间的前缀和减去1-2这个区间的前缀和
一维前缀和

模板其实也很简单

S[i] = a[1] + a[2] + ... a[i]
a[l] + ... + a[r] = S[r] - S[l - 1]

那么我们直接来做模板题吧

AcWing 795.前缀和

题目描述

输入一个长度为 n 的整数序列。

接下来再输入 m 个询问,每个询问输入一对 l,r。

对于每个询问,输出原序列中从第 l 个数到第 r 个数的和。

输入格式

第一行包含两个整数 n 和 m。

第二行包含 n 个整数,表示整数数列。

接下来 m 行,每行包含两个整数 l 和 r,表示一个询问的区间范围。

输出格式

共m行,每行输出一个询问的结果。

数据范围

1 ≤ l ≤ r ≤ n , 1≤l≤r≤n, 1lrn,
1 ≤ n , m ≤ 100000 , 1≤n,m≤100000, 1n,m100000,
− 1000 ≤ 数 列 中 元 素 的 值 ≤ 1000 −1000≤数列中元素的值≤1000 10001000

输入样例:

5 3
2 1 3 6 4
1 2
1 3
2 4

输出样例:

3
6
10

C++代码

#include <cstdio>using namespace std;const int N = 100010;int a[N] , s[N];int main()
{int n , m;scanf("%d%d" , &n , &m);for(int i = 1; i <= n; i ++) scanf("%d" , &a[i]) , s[i] = s[i - 1] + a[i];while(m --){int l , r;scanf("%d%d" , &l , &r);printf("%d\n" ,s[r] - s[l - 1]);}return 0;
}

引用

引用一些大佬的题解,他们解释得比较清楚

z林深时见鹿 AcWing 795. 前缀和 【c++详细题解】

Bug_FreeOωO AcWing 795. 前缀和

zning AcWing 795. 前缀和理解_Java


http://chatgpt.dhexx.cn/article/mKvA3GVp.shtml

相关文章

【算法】前缀和(一维前缀和与二维前缀和)

前缀和是一种重要的预处理&#xff0c;能大大降低查询的时间复杂度。 【一维前缀和】 给定一个数组A[1,2,……n]&#xff0c;则它的前缀和数组为PrefixSum[1..n]。定义为&#xff1a;PrefixSum[i] A[0]A[1]...A[i-1]&#xff1b; 【例子】 A[5,6,7,8] --> PrefixSum[5,…

【Python 百练成钢】前缀和

文章目录 前言&#x1f607;一维前缀和&#x1f608;问题描述问题分析代码实现 二维前缀和&#x1f47f;问题描述问题分析代码实现 ฅʕ•̫͡•ʔฅ&#x1f4af; 前言&#x1f607; 今天分享一下学到的基础算法前缀和。 首先了解一下前缀和的基础概念&#x1f604; 有一个序列…

【每日一算法】二维前缀和算法 _ 模板应用

&#x1f49b; 前情提要&#x1f49b; 本章节是每日一算法的二维前缀和算法的相关知识~ 接下来我们即将进入一个全新的空间&#xff0c;对代码有一个全新的视角~ 以下的内容一定会让你对数据结构与算法有一个颠覆性的认识哦&#xff01;&#xff01;&#xff01; ❗以下内容…

基础算法:二维前缀和

二维前缀和C模板&#xff1a; S[i, j] 第i行j列格子左上部分所有元素的和 S[i, j] S[i-1,j] s[i,j-1] - S[i-1,j-1] a[i,j](表示当前的数) 以(x1, y1)为左上角&#xff0c;(x2, y2)为右下角的子矩阵的和为&#xff1a; S[x2, y2] - S[x1-1,y2] - S[x2,y1-1] S[x1-1,y1-1]…

二维前缀和

二维前缀和 直接看一个例子 假设给定一个矩阵 1 2 4 3 5 1 2 4 6 3 5 9 那么&#xff0c;可以推出他的二维前缀和矩阵为 1 3 7 10 6 9 15 22 12 18 29 45 在二维前缀和数组中&#xff0c;9 1 2 5 1 15 1 2 5 1 4 2 18 1 5 6 2 1 3… … 即二位前缀和数组中第 …

二维数组前缀和

二维数组前缀和 对于二维数组求前缀和,我们先预处理第一行跟第一列的前缀和 第一行跟第一列的前缀和可以看作一维数组的前缀和 前缀和数组的0,0等于原数组的0,0,第一行为原数组第一行的前缀和,第一列为第一列的前缀和 预处理: //原数组 int arr[110][110]{{},{0,1,2,3,4,5,…

前缀和与经典例题详解

前缀和与及经典例题详解 南昌理工ACM集训队 这是目录 前缀和与及经典例题详解前言前缀和P5638 光骓者的荣耀 二维前缀和P2004 领地选择 最大子段和P1115 最大子段和P1719 最大加权矩形 写在最后 前言 下面的例题都出自于洛谷官方算法2-1题单&#xff0c;有兴趣的同学可以去水…

前缀和(C/C++)

目录 1. 前缀和的定义 2. 一维前缀和 2.1 计算公式 2.2 用途 2.3 小试牛刀 3. 二维前缀和 3.1 用途 1. 前缀和的定义 对于一个给定的数列A&#xff0c;他的前缀和数中 S 中 S[ i ] 表示从第一个元素到第 i 个元素的总和。 如下图&#xff1a;绿色区域的和就是前缀和数组…

前缀和(C++)实现

每日一句&#xff1a;真正让人变好的选择过程都不会很舒服&#xff0c;所以人们明知道什么都不做&#xff0c;会比较轻松&#xff0c;但依旧选择追逐梦想。 前缀和 前言一、一维前缀和1.前缀和是什么&#xff1f;2.暴力做法3.前缀和求区间大小3.1如何构成前缀和的形式&#xff…

差分与前缀和

目录 前言 一、算法原理 二、算法图解 三、算法模板 四、算法应用 前言 天梯赛和省赛快开始了&#xff0c;不想拖后腿&#xff0c;边更边学习吧。 酝酿好久的第一篇博客&#xff0c;缺点不少&#xff0c;多多指教吖。 点赞鼓励一下吧&#xff0c;亲。&#x1f619;&#x1…

算法设计 - 前缀和 差分数列

一维数组前缀和的概念 前缀和的概念很简单&#xff0c;我们用一维数组的前缀和来举例&#xff0c;有如下一维数组&#xff1a; arr [1, 2, 3, 4, 5] 该数组的前缀和数组如下 preSum [1, 3, 6, 10, 15] 关系如下&#xff1a; preSum[0] arr[0]preSum[1] arr[0] arr[1]pre…

python 前缀和总结

前缀和是数据结构与算法中比较重要的知识&#xff0c;前缀和经常可以结合哈希表解决很多有意思的问题。为了方便学习&#xff0c;在这里总结leetcode中出现的前缀和问题。 525. 连续数组 给定一个二进制数组 nums &#xff08;只含有0&#xff0c;1&#xff09;, 找到含有相同…

【c++入门(2)】前缀和

大纲 1.计算前缀和 2.计算字段和 3.后缀和 4.前缀积 5.后缀积 6.例题 1.计算前缀和 基础问题&#xff1a; 思路1&#xff1a; 枚举 cin (); for (int i 1; i < q; i) {cin >> x;int sum 0;for (int j 1; j < x; j){sum a[j];}cout << sum << endl…

前缀和

【前缀和】 什么是前缀和&#xff1f;前缀和是一个数组的某项下标之前(包括此项元素)的所有数组元素的和。 设b[]为前缀和数组&#xff0c;a[]为原数组&#xff0c;根据这句话可以得到前缀和的定义式和递推式&#xff1a; 定义式递推式一维前缀和 二维前缀和 【一维前缀和】…

Java前缀和算法

一.什么是前缀和算法 通俗来讲&#xff0c;前缀和算法就是使用一个新数组来储存原数组中前n-1个元素的和&#xff08;如果新数组的当前元素的下标为n&#xff0c;计算当前元素的值为原数组中从0到n-1下标数组元素的和&#xff09;&#xff0c;可能这样讲起来有点抽象&#xff0…

基础算法——前缀和详解

秋名山码民的主页 &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f64f;作者水平很有限&#xff0c;如果发现错误&#xff0c;一定要及时告知作者 前言 由于有些读者朋友私聊我&#xff0c;希望出几期基础算法的讲解&#xff0c;kmp&…

前缀和算法

文章目录 前言一、关于前缀和二、一维数组求前缀和1.求段区间前缀和2.例题&#xff1a;AcWing795. 前缀和AC代码 三、二维数组求前缀和1.求S[i,j]2.求&#xff08;x1&#xff0c;y1&#xff09;&#xff0c;&#xff08;x2&#xff0c;y2&#xff09;子矩阵的和3.例题&#xff…

前缀和详解

目录 前缀和概念前缀和代码前缀和例题题目介绍思路分析相关代码 总结 前缀和概念 前缀和&#xff1a;顾名思义&#xff0c;是要求前缀的总和&#xff0c;什么是前缀&#xff0c;对于一个存放数字的数组而言&#xff0c;前缀就是指的数组的前k项&#xff0c;因此对应的前缀和就…

前缀和与差分 图文并茂 超详细整理(全网最通俗易懂)

目录 1、前缀和2、前缀和算法有什么好处&#xff1f;3、二维前缀和4、差分5、一维差分6、二维差分 1、前缀和 前缀和是指某序列的前n项和&#xff0c;可以把它理解为数学上的数列的前n项和&#xff0c;而差分可以看成前缀和的逆运算。合理的使用前缀和与差分&#xff0c;可以将…

算法:解数独

题目内容 编写一个程序&#xff0c;通过已填充的空格来解决数独问题。 一个数独的解法遵循如下规则&#xff1a; 数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。 本题满足以下设定&#xff1a; …