OI基础——前缀和与差分

简介: 前缀和与差分是常用的时间复杂度优秀的线性数据。

前缀和与差分

  • 引入
    如果给你一个数组,让你对于给出的[L,R]区间中的数据加上1,相信这是非常容易实践的,只需要暴力就完全可以解决这个问题。
    但是在算法竞赛中,像这样的暴力做法很可能会导致TLE,导致我们不能拿到全部分数。
    于是我们有了前缀和与差分。
    (本文章中只涉及到一维的前缀和与差分。)

  • 前缀和
    前缀和,顾名思义就是将前缀的数据加到一起。将文字转化为代码会更容易理解。

    pre[0] = 0;
    for(int i = 1; i <= n; i++)
       pre[i] = pre[i - 1] + a[i];
    

    仔细理解上面三行代码的功能,相信大家都已经理解了。

  • 差分
    前缀和与差分总是结伴出现,这肯定是有原因的。
    如果一个数组a是数组b的前缀和数组,那么数组b就是数组a的差分数组。

    b[i]=a[i]-a[i];
    

    对前缀和数组进行差分操作或者对差分数组进行一个前缀和操作就可以还原出原数组
    当将[L,R]区间上的a数组全部加上x,也就是将b[L]+=x,b[R+1]-=x;(注意此处的R+1。因为b[R]仍是要+x的,所以在b[R+1]才开始-x。)

在实际的算法竞赛中,前缀和与差分数组通常是配合使用的。

目录
相关文章
|
设计模式 缓存
二十三种设计模式全面解析-代理模式(Proxy Pattern)详解:探索隐藏于背后的力量
二十三种设计模式全面解析-代理模式(Proxy Pattern)详解:探索隐藏于背后的力量
835 1
|
网络协议 定位技术 Windows
Windows Server 2019 DNS服务器搭建
Windows Server 2019 DNS服务器搭建
533 1
|
SQL 存储 缓存
MySQL执行流程
本文介绍了MySQL的执行流程,分为server层和引擎层。server层包含连接器、查询缓存、解析器、预处理器、优化器等组件,负责SQL的接收、解析、优化及执行;引擎层负责数据的存储与读取。文章详细解释了各组件的功能,如连接器负责用户身份认证,查询缓存提高查询效率,解析器进行SQL的词法和语法分析,预处理器验证表和字段的存在性,优化器选择最优执行计划,最终由查询执行引擎完成查询并将结果返回给客户端。
262 0
MySQL执行流程
|
算法 安全 Ubuntu
Linux下的软件包管理器有哪些
Linux下的软件包管理器有哪些
574 5
|
Java 程序员 调度
【JAVA 并发秘籍】进程、线程、协程:揭秘并发编程的终极武器!
【8月更文挑战第25天】本文以问答形式深入探讨了并发编程中的核心概念——进程、线程与协程,并详细介绍了它们在Java中的应用。文章不仅解释了每个概念的基本原理及其差异,还提供了实用的示例代码,帮助读者理解如何在Java环境中实现这些并发机制。无论你是希望提高编程技能的专业开发者,还是准备技术面试的求职者,都能从本文获得有价值的见解。
227 1
|
9月前
|
存储 网络协议 安全
Java网络编程,多线程,IO流综合小项目一一ChatBoxes
**项目介绍**:本项目实现了一个基于TCP协议的C/S架构控制台聊天室,支持局域网内多客户端同时聊天。用户需注册并登录,用户名唯一,密码格式为字母开头加纯数字。登录后可实时聊天,服务端负责验证用户信息并转发消息。 **项目亮点**: - **C/S架构**:客户端与服务端通过TCP连接通信。 - **多线程**:采用多线程处理多个客户端的并发请求,确保实时交互。 - **IO流**:使用BufferedReader和BufferedWriter进行数据传输,确保高效稳定的通信。 - **线程安全**:通过同步代码块和锁机制保证共享数据的安全性。
392 23
|
10月前
|
SQL 关系型数据库 MySQL
京东面试:MySQL MVCC是如何实现的?如何通过MVCC实现读已提交、可重复读隔离级别的?
1.请解释什么是MVCC,它在数据库中的作用是什么? 2.在MySQL中,MVCC是如何实现的?请简述其工作原理。 3.MVCC是如何解决读-写和写-写冲突的? 4.在并发环境中,当多个事务同时读取同一行数据时,MVCC是如何保证每个事务看到的数据版本是一致的? 5.MVCC如何帮助提高数据库的并发性能?
京东面试:MySQL MVCC是如何实现的?如何通过MVCC实现读已提交、可重复读隔离级别的?
|
存储 数据库 数据安全/隐私保护
MVCC实现原理
【10月更文挑战第15天】MVCC 通过维护版本链和相关信息,实现了在多事务并发环境下的数据隔离和并发控制,提高了数据库的性能和可用性。
419 57
|
存储 算法 Java
为什么重写 equals 方法时必须同时重写 hashCode 方法?
本文探讨了 Java 中 `hashCode` 方法的作用及其与 `equals` 方法的关系,解释了为什么重写 `equals` 方法时必须同时重写 `hashCode` 方法,并提供了如何正确重写 `hashCode` 方法的示例。
240 2
|
资源调度 JavaScript 前端开发
vue-cli从0到1快速入门!
【8月更文挑战第16天】 vue-cli从0到1快速入门!
427 4
 vue-cli从0到1快速入门!