前缀和(Prefix(Prefix(Prefix Sum)Sum)Sum)的定义

前缀和是一种高效处理区间求和问题的算法技巧
其核心思想是通过预处理构建一个前缀和数组
使得后续的区间和查询可以在常数时间O(1)O(1)O(1)内完成

核心概念

  • 定义
    给定一个数组a[1...n]a[1...n]a[1...n],其前缀和数组s[1...n]s[1...n]s[1...n]定义为:
    s[0]=0(边界条件)s[0]=0(边界条件)s[0]=0(边界条件)
    s[i]=a[1]+a[2]+...+a[i](前i个元素的和)s[i]=a[1]+a[2]+...+a[i](前i个元素的和)s[i]=a[1]+a[2]+...+a[i](i个元素的和)
    通过递推计算:s[i]=s[i−1]+a[i]s[i]=s[i-1]+a[i]s[i]=s[i1]+a[i]
  • 作用
    快速计算区间和:查询a[l...r]a[l...r]a[l...r]的和时,只需计算s[r]−s[l−1]s[r]-s[l-1]s[r]s[l1],无需遍历整个区间。
    优化时间复杂度:
    预处理:O(n)O(n)O(n)
    单次查询:O(1)O(1)O(1)
    适用于频繁查询但数据不频繁修改的场景(如静态数组)

对比其他方法差距/使用前缀和的原因

方法预处理时间单次查询时间适用场景
暴力遍历O(1)O(n)查询极少
前缀和O(n)O(1)查询多,数据静态
线段树/树状数组O(n)O(log n)查询和修改都频繁

总结

前缀和通过空间换时间,将区间和查询优化至O(1)O(1)O(1),是算法竞赛中的常客
若需支持动态修改,可结合差分数组或升级为树状数组/线段树

前缀和代码模板示例

#include<iostream>
using namespace std;
const int N=1e6+10;
int a[N],s[N];
int main(){int n,q;//n=数组个数,q=询问次数cin>>n>>q;for(int i=1;i<=n;i++){cin>>a[i];//读入初值s[i]=s[i-1]+a[i];//计算前缀和}for(int i=1;i<=q;i++){int l,r;//询问区间cin>>l>>r;cout<<s[r]-s[l-1]<<endl;//输出区间和}return 0;
}

原理

非常EasyEasyEasy
前缀和数组s[x]s[x]s[x]的值相当于a[1]a[1]a[1]~a[x]a[x]a[x]
利用这个原理计算得知
a[l]到a[r]的和=s[r]−s[l−1]a[l]到a[r]的和=s[r]-s[l-1]a[l]a[r]的和=s[r]s[l1]

例题

P8218 【深进1.例1】求区间和

题目描述

给定由 nnn 个正整数组成的序列 a1,a2,⋯,ana_1, a_2, \cdots, a_na1,a2,,anmmm 个区间 [li,ri][l_i,r_i][li,ri],分别求这 mmm 个区间的区间和。

输入格式

第一行包含一个正整数 nnn,表示序列的长度。

第二行包含 nnn 个正整数 a1,a2,⋯,ana_1,a_2, \cdots ,a_na1,a2,,an

第三行包含一个正整数 mmm,表示区间的数量。

接下来 mmm 行,每行包含两个正整数 li,ril_i,r_ili,ri,满足 1≤li≤ri≤n1\le l_i\le r_i\le n1lirin

输出格式

mmm 行,其中第 iii 行包含一个正整数,表示第 iii 组答案的询问。

输入输出样例 #1

输入 #1

4
4 3 2 1
2
1 4
2 3

输出 #1

10
5

说明/提示

样例解释

111 到第 444 个数加起来和为 101010。第 222 个数到第 333 个数加起来和为 555

数据范围

对于 50%50 \%50% 的数据:n,m≤1000n,m\le 1000n,m1000

对于 100%100 \%100% 的数据:1≤n,m≤1051 \le n, m\le 10^51n,m1051≤ai≤1041 \le a_i\le 10^41ai104

分析

经典的前缀和例题
看输入要求,输入数组个数nnn
然后给数组a[]a[]a[]初值,再输入询问次数mmm
mmm行的li,ril_i,r_ili,ri并询问a[li]到a[ri]a[l_i]到a[r_i]a[li]a[ri]的区间和
跟模板一样,但是需要把mmm的输入改到输入数组a[]a[]a[]的后方

ACACAC代码

#include<iostream>
using namespace std;
const int N=1e6+10;
int a[N],s[N];
int main(){int n,m;//n=数组个数,m=询问次数cin>>n;for(int i=1;i<=n;i++){cin>>a[i];//读入初值s[i]=s[i-1]+a[i];//计算前缀和}cin>>m;for(int i=1;i<=m;i++){int l,r;//询问区间cin>>l>>r;cout<<s[r]-s[l-1]<<endl;//输出区间和}return 0;
}

题单附送

题单题单题单
包含前缀和、差分、离散化

~ 完结撒花完结撒花完结撒花 ~

附:例题来自洛谷洛谷洛谷
推荐洛谷洛谷洛谷作为为你的刷题区域
下一篇预告:还在找~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/918391.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/918391.shtml
英文地址,请注明出处:http://en.pswp.cn/news/918391.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaEE 初阶第十七期:文件 IO 的 “管道艺术”(下)

专栏&#xff1a;JavaEE初阶起飞计划 个人主页&#xff1a;手握风云 目录 一、Java文件内容写入 1.1. OutputStream 二、字符流读取和写入 2.1. Reader 2.2. Writer 三、示例练习 3.1. 查找文件功能 一、Java文件内容写入 1.1. OutputStream OutputStream同样只是⼀个抽…

【liunx】web高可用---nginx

NGINX简介Nginx&#xff08;发音为 “engine x”&#xff09;是一款由俄罗斯程序员 Igor Sysoev 开发的 轻量级、高性能的 HTTP 和反向代理服务器&#xff0c;同时也是一个 IMAP/POP3/SMTP 代理服务器。自 2004 年首次发布以来&#xff0c;Nginx 凭借其 高并发处理能力、低内存…

FPGA+护理:跨学科发展的探索(二)

FPGA护理&#xff1a;跨学科发展的探索&#xff08;二&#xff09; 系列文章目录 FPGA护理&#xff1a;跨学科发展的探索&#xff08;一&#xff09; 文章目录FPGA护理&#xff1a;跨学科发展的探索&#xff08;二&#xff09;系列文章目录引言三、FPGA 在精神医学护理中的应用…

localforage的数据仓库、实例、storeName和name的概念和区别

在 localForage 中&#xff0c;数据仓库、实例、storeName 和 name 是核心概念&#xff0c;用于管理底层存储&#xff08;IndexedDB/WebSQL/localStorage&#xff09;。以下是详细解释和区别&#xff1a; 1. 数据仓库 (Database) 定义&#xff1a;指底层的物理数据库&#xff…

使用MAS(Microsoft Activation Scripts)永久获得win10专业版和office全套

文章目录Microsoft Activation Scripts简介下载地址使用方法Microsoft Activation Scripts简介 MAS是Microsoft Activation Scripts缩写。 主要提供如下功能&#xff1a; 使用该脚本可以永久获得win10专业版和office全套&#xff08;可选&#xff09; 下载地址 https://pan…

零 shot 语义+在线闭环:深度学习让机器人学会“主动”

来gongzhonghao【图灵学术计算机论文辅导】&#xff0c;快速拿捏更多计算机SCI/CCF发文资讯&#xff5e;在当下&#xff0c;机器人与深度学习的融合正成为AI领域的核心发展趋势&#xff0c;相关研究在顶会顶刊上热度居高不下。从ICLR到CoRL&#xff0c;诸多前沿成果不断涌现&am…

Nginx学习笔记(三)——在 CentOS 7 中配置阿里云镜像源

&#x1f4da; Nginx学习笔记&#xff08;三&#xff09;——在 CentOS 7 中配置阿里云镜像源 在 CentOS 7 中配置阿里云镜像源可显著提升软件安装和更新的速度&#xff0c;以下是详细操作步骤&#xff1a; &#x1f527; 配置阿里云镜像源步骤 1️⃣ 备份原有源配置 sudo mv /…

WebSocket--简单介绍

一、什么是 WebSocket&#xff1f;定义&#xff1a;WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。作用&#xff1a;实现客户端&#xff08;浏览器&#xff09;和服务器之间的实时、双向通信。优势&#xff1a;连接保持&#xff0c;通信实时性强&#xff08;不像 HT…

【STM32 LWIP配置】STM32H723ZG + Ethernet +LWIP 配置 cubemx

STM32H723ZG LAN8742 Ethernet LWIP 配置 cubemx &#x1f31e;这边记录一下这块mcu 配置以太网的过程&#xff0c;IDE是KEIL MDK&#xff0c;其实就是在下面多次提到的blog的基础上 在scatter file进行配置 首先&#xff0c;如果想要简单一点 直接去cubemx 那边获取相关的例…

EI检索-学术会议 | 人工智能、虚拟现实、可视化

第五届人工智能、虚拟现实与可视化国际学术会议&#xff08;AIVRV 2025&#xff09;定于2025年9月5-7日在中国 成都召开。人工智能正驱动各行业智能化转型&#xff0c;提升效率与质量&#xff1b;虚拟现实技术以其沉浸感重塑教育、娱乐、医疗等领域体验&#xff1b;可视化技术…

力扣(H指数)

一、题目分析 &#xff08;一&#xff09;问题描述 给定一个整数数组 citations&#xff0c;其中 citations[i] 表示研究者的第 i 篇论文被引用的次数。我们需要计算并返回该研究者的 H 指数。根据维基百科定义&#xff1a;H 指数代表“高引用次数”&#xff0c;一名科研人员的…

标准io(1)

标准I/O基础概念标准I/O&#xff08;Standard Input/Output&#xff09;是C语言提供的一组高级文件操作函数&#xff0c;位于<stdio.h>头文件中。与低级I/O&#xff08;如Unix的系统调用read/write&#xff09;相比&#xff0c;标准I/O引入了缓冲机制&#xff0c;能显著提…

线性代数1000题学习笔记

1000题线代基础第一章1-101000题线代基础第二章1-171000题线代基础第三章1-11

LeetCode算法日记 - Day 8: 串联所有单词的子串、最小覆盖子串

目录 1.串联所有单词的子串 1.2 解法 1.3 代码实现 2. 最小覆盖子串 2.1 题目解析 2.2 解法 2.3 代码实现 1.串联所有单词的子串 30. 串联所有单词的子串 - 力扣&#xff08;LeetCode&#xff09; 给定一个字符串 s 和一个字符串数组 words。 words 中所有字符串 长度…

linux实战:基于Ubuntu的专业相机

核心组件就是QTimerOpenCV的组合方案摄像头启停控制用QPushButton实现&#xff0c;帧显示必须用QLabel而不能用普通控件&#xff0c;视频流刷新用QTimer比多线程更简单想快速实现摄像头控制功能&#xff0c;核心组件就是QTimerOpenCV的组合方案。摄像头启停控制用QPushButton实…

《深度剖析前端框架中错误边界:异常处理的基石与进阶》

错误边界作为一种特殊的组件机制&#xff0c;正悄然重塑着应用应对异常的底层逻辑。它并非简单的代码片段组合&#xff0c;而是一套贯穿组件生命周期的防护体系&#xff0c;其核心价值在于将局部错误的影响牢牢锁定在可控范围内&#xff0c;避免整个应用陷入不可挽回的崩溃状态…

6GB显存玩转SD微调!LoRA-scripts本地部署教程,一键炼出专属AI画师

一、介绍LoRA-scripts&#xff08;又名 SD-Trainer&#xff09;&#xff0c;是一个专为训练低秩自适应&#xff08;LoRA&#xff09;模型设计的开源工具集主要应用于Stable Diffusion等AI绘图模型的微调&#xff0c;帮助用户高效创建定制化风格、角色或概念的轻量级模型。目前已…

探索AI的数学奇迹:Gemini 2.5 Pro如何摘得IMO金牌

🌍 引言:从人类天才到AI奇才的跨越 想象一下,一个AI模型坐在国际数学奥林匹克(IMO)的考场里,手里拿着笔(好吧,其实是处理token),面对那些让高中生们头疼不已的难题。它不是靠死记硬背,而是通过深思熟虑的推理,一步步攻克难关。这听起来像科幻小说,但2025年,这已…

MCP学习与实践

目录 1.MCP简介 1.1 MCP是什么 1.2 MCP与Agent关系&#xff1a; 1.3 MCP的架构 2. MCP原理 2.1 MCP 工作过程 2.2 MCP 通讯方式 2. MCP使用 2.1 cursor中增加MCP-SSE(高德地图MCP) 2.2 cursor中增加MCP-STDIO&#xff08;12306-MCP&#xff09; 本文详细讲解了什么是…

MySQL(187)如何使用pt-query-digest进行查询分析?

使用 pt-query-digest 工具可以帮助分析 MySQL 查询的性能&#xff0c;找出慢查询、频繁查询以及消耗资源较多的查询&#xff0c;从而为优化提供依据。以下是详细深入的使用 pt-query-digest 进行查询分析的步骤和相关示例。 一、安装 pt-query-digest pt-query-digest 是 Perc…