【洛谷题解】P8218 【深进1.例1】求区间和(一维前缀和模板题)
难度普及− 知识点一维前缀和 所属专栏【洛谷题解】前置知识《一维前缀和详解》目录一、题目描述二、题目分析1. 暴力做法2. 为什么想到前缀和3. 用样例模拟一遍三、代码实现1. 算法思路2. C代码实现四、细节补充1. 这道题需要开 long long 吗2. 复杂度分析五、总结一、题目描述题目链接P8218 【深进1.例1】求区间和【题目描述】给定由n nn个正整数组成的序列a 1 , a 2 , ⋯ , a n a_1, a_2, \cdots, a_na1​,a2​,⋯,an​和m mm个区间[ l i , r i ] [l_i, r_i][li​,ri​]分别求这m mm个区间的区间和。【输入格式】第一行包含一个正整数n nn表示序列的长度。第二行包含n nn个正整数a 1 , a 2 , ⋯ , a n a_1, a_2, \cdots, a_na1​,a2​,⋯,an​。第三行包含一个正整数m mm表示区间的数量。接下来m mm行每行包含两个正整数l i , r i l_i, r_ili​,ri​满足1 ≤ l i ≤ r i ≤ n 1 \le l_i \le r_i \le n1≤li​≤ri​≤n。【输出格式】共m mm行其中第i ii行包含一个正整数表示第i ii组答案的询问。【输入样例】44 3 2 121 42 3【输出样例】105【说明/提示】第1 11到第4 44个数加起来和为10 1010第2 22个数到第3 33个数加起来和为5 55。对于50 % 50\%50%的数据n , m ≤ 1000 n, m \le 1000n,m≤1000对于100 % 100\%100%的数据1 ≤ n , m ≤ 10 5 1 \le n, m \le 10^51≤n,m≤1051 ≤ a i ≤ 10 4 1 \le a_i \le 10^41≤ai​≤104。二、题目分析这道题的题意非常直接给一个数组多次询问某一段区间的和。看到这样的题目我们先不急着套算法而是从最朴素的做法开始想。1. 暴力做法最容易想到的做法是每次询问就用一个循环从a l a_lal​加到a r a_rar​。for(inti1;im;i){intl,r,sum0;scanf(%d%d,l,r);for(intjl;jr;j)suma[j];// 每次询问都重新累加printf(%d\n,sum);}这个做法思路完全正确但我们要结合数据范围来判断它能不能通过。对于50 % 50\%50%的数据n , m ≤ 1000 n, m \le 1000n,m≤1000最坏情况下要计算1000 × 1000 10 6 1000 \times 1000 10^61000×1000106次完全没有压力。对于100 % 100\%100%的数据n , m ≤ 10 5 n, m \le 10^5n,m≤105最坏情况下每次询问都是[ 1 , n ] [1, n][1,n]总共要计算10 5 × 10 5 10 10 10^5 \times 10^5 10^{10}105×1051010次远远超过计算机 1 秒约10 8 10^8108次的运算能力一定会超时。所以暴力做法大约只能拿到一半的分数。我们需要一种能快速回答每一次询问的方法。2. 为什么想到前缀和我们来观察一下这道题的特点数组在输入之后不会再被修改需要多次询问区间和。“静态数组 多次区间求和”这正是前缀和最典型的使用场景。在《一维前缀和详解》中我们已经推导过s i s i − 1 a i , a l a l 1 ⋯ a r s r − s l − 1 s_i s_{i-1} a_i, \qquad a_l a_{l1} \cdots a_r s_r - s_{l-1}si​si−1​ai​,al​al1​⋯ar​sr​−sl−1​先用O ( n ) O(n)O(n)的时间求出前缀和数组之后每次询问只需要做一次减法时间复杂度降到O ( 1 ) O(1)O(1)。3. 用样例模拟一遍在写代码之前我们先用样例手动模拟一遍确认思路没有问题。数组为4 , 3 , 2 , 1 4, 3, 2, 14,3,2,1先求出前缀和数组下标i ii01234a i a_iai​-4321s i s_isi​047910接下来回答两次询问询问[ 1 , 4 ] [1, 4][1,4]s 4 − s 0 10 − 0 10 s_4 - s_0 10 - 0 10s4​−s0​10−010✅询问[ 2 , 3 ] [2, 3][2,3]s 3 − s 1 9 − 4 5 s_3 - s_1 9 - 4 5s3​−s1​9−45✅两个结果都和样例输出一致说明思路是正确的接下来就可以动手写代码了。三、代码实现1. 算法思路根据上面的分析代码可以分为三个部分读入n nn和数组同时求出前缀和读入m mm依次读入每次询问的l ll和r rr用s r − s l − 1 s_r - s_{l-1}sr​−sl−1​计算并输出答案我们根据思路一步一步来实现①首先读入数组。和模板一样我们一边读入一边求前缀和数组下标从1 11开始scanf(%d,n);for(inti1;in;i){scanf(%d,a[i]);s[i]s[i-1]a[i];}②这道题的输入格式需要注意m mm是在数组之后才读入的而不是和n nn一起在第一行。很多同学习惯性地写成scanf(%d%d, n, m)结果读入全部错位。所以这里要单独读入m mmscanf(%d,m);③最后处理每一次询问代入公式输出答案while(m--){intl,r;scanf(%d%d,l,r);printf(%lld\n,s[r]-s[l-1]);}2. C代码实现最后我们将代码整合一下完整代码如下#includebits/stdc.husingnamespacestd;constintN100010;intn,m,a[N];longlongs[N];// 前缀和数组intmain(){// ① 读入数组同时求前缀和scanf(%d,n);for(inti1;in;i){scanf(%d,a[i]);s[i]s[i-1]a[i];}// ② 注意m 在数组之后读入scanf(%d,m);// ③ O(1) 回答每一次询问while(m--){intl,r;scanf(%d%d,l,r);printf(%lld\n,s[r]-s[l-1]);}return0;}四、细节补充1. 这道题需要开 long long 吗我们来算一下前缀和的最大值最多10 5 10^5105个数每个数最大10 4 10^4104所以前缀和最大为10 5 × 10 4 10 9 10^5 \times 10^4 10^9105×104109。而int的最大值约为2.1 × 10 9 2.1 \times 10^92.1×109所以这道题用int其实也不会溢出。但是并不是每道前缀和题目的数据都这么友好只要a i a_iai​的范围稍微大一点int就会溢出。所以还是建议大家养成前缀和数组默认开long long的习惯这样就不用每次都去计算会不会溢出。2. 复杂度分析时间复杂度预处理O ( n ) O(n)O(n)每次询问O ( 1 ) O(1)O(1)总计O ( n m ) O(n m)O(nm)。空间复杂度O ( n ) O(n)O(n)。对于n , m ≤ 10 5 n, m \le 10^5n,m≤105的数据前缀和做法只需要约2 × 10 5 2 \times 10^52×105次运算轻松通过。五、总结这是一道非常标准的一维前缀和模板题做这道题时要掌握以下几点识别题型看到静态数组 多次区间求和要第一时间想到前缀和结合数据范围10 5 10^5105规模的多次询问暴力O ( n m ) O(nm)O(nm)会超时需要O ( 1 ) O(1)O(1)回答询问注意输入格式本题的m mm在数组之后读入记住公式区间和是s r − s l − 1 s_r - s_{l-1}sr​−sl−1​减去的是左端点前一个位置的前缀和。掌握了这道模板题之后可以继续挑战下一道练习题 P6568 [NOI Online #3 提高组] 水壶看看前缀和在定长区间问题中是怎么用的。相关文章《一维前缀和详解》下一篇题解P6568 水壶如果这篇题解对你有帮助欢迎点赞、收藏、关注每周持续更新 CSP-J 知识点和洛谷题解。

相关新闻

【大数据毕设项目】基于K-Means的低能见度事件预测模型与可视化分析系统\基于数据挖掘的站间同步低能现象分析与可视化研究

【大数据毕设项目】基于K-Means的低能见度事件预测模型与可视化分析系统\基于数据挖掘的站间同步低能现象分析与可视化研究

文章目录 一、项目开发背景意义 二、项目开发技术 三、项目开发内容 四、项目展示 五、项目相关代码 六、最后 一、项目开发背景意义 随着气象监测技术的快速发展,气象领域积累了海量的多源观测数据。低能见度事件对航海、航空以及陆地交通的安全运行构成严重…

2026/10/12 2:25:23 阅读更多 →
【C++ 入门】从 C 过渡到 C++:基础语法与核心特性入门

【C++ 入门】从 C 过渡到 C++:基础语法与核心特性入门

目录 1.C的第一个程序 2.命名空间namespace 一、为什么有namespace ​二、namespace的特性 特性1:命名空间可以拆分,追加定义 特性2:命名空间可以嵌套 特性3:匿名命名空间(无名字namespace) 特性4&…

2026/10/12 2:25:23 阅读更多 →
题解:洛谷 P10112 [GESP202312 八级] 奖品分配

题解:洛谷 P10112 [GESP202312 八级] 奖品分配

本文分享的必刷题目是从蓝桥云课、洛谷、AcWing等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。 欢迎大…

2026/10/12 2:25:23 阅读更多 →

最新新闻

分红时代已死,资本证明时代崛起

分红时代已死,资本证明时代崛起

《分红时代已死,资本证明时代崛起》——下一轮能源周期,市场奖励的不是“投得更多”,而是“证明每一笔钱为何值得花”过去五年,能源公司靠不花钱赢得投资者;未来五年,要靠会花钱。投下去的是资本&#xff0…

2026/10/12 4:01:25 阅读更多 →
OpenUI5源码解析:DesignTime.js如何驱动可视化编辑器

OpenUI5源码解析:DesignTime.js如何驱动可视化编辑器

接触过 OpenUI5 可视化编辑器的同学,应该都对“为什么编辑器知道这个控件能拖拽、那个属性可以改”感到好奇。答案的关键,就藏在一个叫 DesignTime.js 的模块里。这是 OpenUI5 源码解析系列的第三十一篇,我们来把 DesignTime.js 完整拆开。这…

2026/10/12 4:01:25 阅读更多 →
配电网韧性提升:移动储能预布局与动态调度建模与Matlab实现

配电网韧性提升:移动储能预布局与动态调度建模与Matlab实现

1. 项目背景与核心问题剖析1.1 为什么要关注配电网韧性与移动储能先说结论:配电网韧性(Resilience)研究的本质,是在极端扰动发生后让系统"扛得住、恢复快"。传统的可靠性分析更多关注故障概率和平均停电时间&#xff0c…

2026/10/12 4:01:25 阅读更多 →
SSH 连接 VirtualBox 里的 Ubuntu

SSH 连接 VirtualBox 里的 Ubuntu

环境:VirtualBox Ubuntu 22.04.5 LTS(服务器版,镜像 ubuntu-22.04.5-live-server-amd64.iso),宿主机 Windows。初始动机 用 VirtualBox 装完 Ubuntu 服务器版后,一直盯着它自带的小黑框操作,字…

2026/10/12 4:01:25 阅读更多 →
QQ空间代码查询工具:从解压到搭建本地代码库的完整指南

QQ空间代码查询工具:从解压到搭建本地代码库的完整指南

简介:一款基于PHP编写的QQ空间代码查询工具,面向Web开发初学者、PHP爱好者以及想研究QQ空间页面结构与特效实现的用户。使用者只需输入QQ号码,程序便会向QQ空间发起请求,获取页面源码并解析出其中的HTML、CSS与JavaScript代码&…

2026/10/12 4:01:25 阅读更多 →
SonnetDB 统计聚合函数:stddev/variance/spread/median/mode

SonnetDB 统计聚合函数:stddev/variance/spread/median/mode

SonnetDB 统计聚合函数:stddev/variance/spread/median/mode SonnetDB 的统计聚合用于观察时序数据的波动、跨度和常见状态。本文介绍 stddev、variance、spread、median 和 mode,重点说明样本统计、中位数估计和类型边界。内容按 2026-10-11 当前工作树…

2026/10/12 4:00:24 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:54 阅读更多 →