前缀和思想

news2024/10/5 16:22:33

何为前缀和

有一个数组a, 为  a_{1 }        a_{2}         a_{3 }      ......    a_{n }

前缀和   S_{i}  =   a_{1 }    +    a_{2}     +    a_{3 }   +   ......   a_{i}

有两个问题:   

1.如何求S_{i}?   只需要从前往后遍历,令S_{i} = S_{i-1 } + a_{i} 就可以了,最开始是S_{1} = S_{0 } + a_{1 }  ,定义 S_{0 } = 0

2. S_{i}有什么用?  能够快速地求出原数组中某一段的和,预处理的时间复杂度是O(n),而对于每次查询时间复杂度是O(1),例如求原数组中 [l,r]区间中所有的数的和 也就是a_{l }    +    a_{l+1 }     +    a_{l+2 }   +   ......   a_{r} ,如果没有前缀和数组的话,就要循环一遍才可以求出结果,他的时间复杂度是O(n),如果有前缀和数组,那么只需要 S_{r} - S_{l-1} 就能得到区间和,那么为什么是l-1,很简单,例如我们要求[1,3]区间和,也就是a_{1 }  +  a_{2}   +   a_{3 } , 这就是 S_{3} - S_{1-1}的 差

3.为什么数组是从 a_{1 } 开始,要定义 S_{0 } = 0 ?其实这主要是边界问题,我们要让每一个 S_{i} 的求值都能够用到统一的公式 ,我们求前缀和的公式是S_{i} = S_{i-1 } + a_{i},那么求 S_{1}就要有 S_{0} ,我们求[1,10]的区间和是 S_{10} - S_{0 } ,也需要 S_{0} ,这样就不需要额外讨论了 

题目

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

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

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

输入格式
第一行包含两个整数 n和 m。

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

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

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

数据范围
1≤l≤r≤n,
1≤n,m≤100000,
−1000≤数列中元素的值≤1000
输入样例
5 3
2 1 3 6 4
1 2
1 3
2 4
输出样例
3
6
10

代码

 

#include <iostream>

using namespace std;


const int N = 100010;
int a[N];
int S[N];
int n, m;


int main(void)
{
	cin >> n >> m;

	for (int i = 1; i <= n; i++)
	{
        cin >> a[i];
		S[i] = S[i - 1] + a[i]; // 前缀和的初始化
	}

	int l, r;
	while (m--)
	{
		cin >> l >> r;
		printf("%d\n", S[r] - S[l - 1]);
	}

	return 0;
}

完美运行,当然输入数据可以使用scanf,会比cin的速度快1倍,前缀和不是一个模版,而是一种思想

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

利用procdump+Mimikatz绕过杀软获取Windows明文密码

利用procdumpMimikatz绕过杀软获取Windows明文密码 1.原理2.实操部分 1.原理 Mimikatz是从lsass.exe中提取明文密码的&#xff0c;当无法在目标机器上运行Mimikatz时&#xff0c;我们可使用ProcDump工具将系统的lsass.exe进程进行转储&#xff0c;导出dmp文件&#xff0c;拖回…

计算机网络工程毕业设计题目选题大全

文章目录 0 简介1 如何选题2 最新网络工程选题2.1 Java web - SSM 系统2.2 大数据方向2.3 人工智能方向2.4 其他方向 4 最后 0 简介 学长搜集分享最新的网络工程专业毕设毕设选题&#xff0c;难度适中&#xff0c;适合作为毕业设计&#xff0c;大家参考。 学长整理的题目标准…

windows 下使用virtualbox7.0设置共享文件夹详细,绝对好用

1、打开virtualbox软件 &#xff0c;点击设置-》存储-》控制器-》新建虚拟光驱&#xff0c;如下图所示 2、 重启virtualbox&#xff0c;重启方式可使用 enter键方式&#xff0c;会弹出一个小窗口&#xff0c;在小窗口中点击 设备-》安装增强功能 点击后&#xff0c;进入linux…

万字总结线程安全问题

目录 1. 线程安全 1.1 线程不安全的原因 1&#xff09;修改共享数据 2&#xff09;原子性 2&#xff09;可见性 2. synchronized 关键字-监视器锁 monitor lock 2.1 synchronized 的特性 1&#xff09;互斥 2&#xff09;可重入 2.2 使用 synchronized 解决上面的线程…

阿里张勇“下课” “逍遥子”从此逍遥了

作者&#xff1a;积溪 琥珀消研社快评&#xff1a;他服务过两个首富&#xff0c;曾被称为找工皇帝&#xff0c;如今张勇从干了16年的阿里辞职&#xff0c; 逍遥子从此逍遥了&#xff1f;#阿里 #张勇 #马云 马爸爸曾说过&#xff0c;他天不怕地不怕&#xff0c;就怕CFO当CEO&a…

【Linux网络】TCP/IP三次握手、四次挥手流程

目录 一、三次握手&#xff0c;建立连接 二、四次挥手&#xff0c;断开连接 三、主要字段 1、标志位&#xff08;Flags&#xff09; 2、序号&#xff08;sequence number&#xff09; 3、确认号&#xff08;acknowledgement number&#xff09; 四、三次握手的报文变化 五…

python3如何安装各类库的小总结

我的python3的安装路径是&#xff1a; C:\Users\Administrator\AppData\Local\Programs\Python\Python38 C:\Users\Administrator\AppData\Local\Programs\Python\Python38\python3.exeC:\Users\Administrator\AppData\Local\Programs\Python\Python38\Scripts C:\Users\Admin…

全球视野,共赴“睛”彩!四川眼科医院2023全国眼科学术大会行圆满收官!

9月6日—10日&#xff0c;国内眼科学界最盛大的学术会议——中华医学会第二十七次全国眼科学术大会(CCOS 2023)在湖南长沙隆重举办!逾万名国内外眼科专家、学者代表参加盛会&#xff0c;聚焦眼科发展的新技术、新知识以及新的经验&#xff0c;分享眼科和视觉科学方面最新的研究…

如何在JavaScript中实现链式调用(chaining)?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ JavaScript中的链式调用⭐ 示例⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&#xff01;这个专栏是为那些对Web开发感兴…

JD(商品详情)API接口

为了进行电商平台 的API开发&#xff0c;首先我们需要做下面几件事情。 1&#xff09;开发者注册一个账号 2&#xff09;然后为每个JD应用注册一个应用程序键&#xff08;App Key) 。 3&#xff09;下载JDAPI的SDK并掌握基本的API基础知识和调用 4&#xff09;利用SDK接口和…

肖sir__mysql之介绍__001

mysql之介绍 一、认识数据库 &#xff08;1&#xff09;什么是数据库&#xff1f; 是存放数据的电子仓库。以某种方式存储百万条&#xff0c;上亿条数据&#xff0c;供多个用户访问共享。 如&#xff1a; &#xff08;2&#xff09;数据库分关系型数据库和非关系型数据库 a、…

互联网行业:是走下坡路还是瘦死的骆驼比马大?看看这个你就知道了!

随着互联网行业的快速发展&#xff0c;一些人开始质疑这个行业是否已经开始走下坡路了。 但是&#xff0c;我们想说的是&#xff0c;互联网行业还远远没有达到饱和状态&#xff0c;它仍然是一个充满机遇和挑战的领域。 让我们来看一些数据。根据最新的统计数据显示&#xff0c…

第二证券:低位放量下跌是什么征兆?

近年来&#xff0c;股市的波动一直是人们重视的热点。低位放量跌落是出资者最不愿意看到的&#xff0c;可是却经常呈现。那么&#xff0c;低位放量跌落是什么预兆呢&#xff1f;从多个角度剖析一下原因&#xff0c;帮助出资者更好地了解商场动态。 从技能面剖析&#xff0c;低…

033:跨域,vue端和 Nignx反向代理的配置详细解析

第033个 查看专栏目录: VUE ------ element UI 专栏目标 在vue和element UI联合技术栈的操控下&#xff0c;本专栏提供行之有效的源代码示例和信息点介绍&#xff0c;做到灵活运用。 &#xff08;1&#xff09;提供vue2的一些基本操作&#xff1a;安装、引用&#xff0c;模板使…

我的创作纪念日---从考研调剂到研一的旅程

文章目录 一、前言二、机缘三、收获四、日常五、憧憬 一、前言 大家好&#xff0c;我是小馒头学Python&#xff0c;小馒头学Python就是我&#xff0c;今天是我第一次收到创作纪念日的私信&#xff0c;去年的今天我还在考研&#xff0c;那个时候整天浑浑噩噩的&#xff0c;迷茫…

flex布局学习笔记

flex布局 推荐网址&#xff1a;弹性框完整指南 |CSS-Tricks - CSS-Tricks 基础知识和术语 由于flexbox是一个完整的模块&#xff0c;而不是一个单一的属性&#xff0c;它涉及很多事情&#xff0c;包括它的整套属性。其中一些应该在容器&#xff08;父元素&#xff0c;称为“…

【窗体】Winform两个窗体之间通过委托事件进行值传递,基础篇

2023年&#xff0c;第38周。给自己一个目标&#xff0c;然后坚持总会有收货&#xff0c;不信你试试&#xff01; 在实际项目中&#xff0c;我们可能会用到一些窗体做一些小工具或者小功能。比如&#xff1a;运行程序&#xff0c;在主窗体A基础上&#xff0c;点击某个按钮希望能…

华为云云耀云服务器L实例评测|docker私有仓库部署手册

【软件安装版本】【集群安装&#xff08;是&#xff09;&#xff08;否&#xff09;】 版本号 文档编写 文档审核 创建日期 修改日期 1.0 jzg jzg 2023.9.13 一. 部署规划与架构 1. 规划&#xff1a;&#xff08;集群&#xff1a;网络规划&…

墨西哥专线清关有什么要求?

墨西哥专线的清关要求是根据当地法规和国际贸易协定而定的。以下是一些墨西哥专线清关的常见要求&#xff1a; 一、 清关文件 进口货物需要提供一系列文件&#xff0c;包括商业发票、装箱单、进口许可证、运输文件、保险文件等。这些文件需要准确、完整地填写&#xff0c;并且…

Java | synchronized和Lock

不爱生姜不吃醋⭐️ 如果本文有什么错误的话欢迎在评论区中指正 与其明天开始&#xff0c;不如现在行动&#xff01; 文章目录 &#x1f334;前言&#x1f334;一、同步锁&#x1f334;二、Lock锁&#x1f334;三.死锁&#x1f334;总结 &#x1f334;前言 本文内容是关于Java…