差分与前缀和

目录

差分法

例题:大学里的树木要打药

前缀和

例题:大学里的树木要维护

差分法

差分法的应用主要是用于处理区间问题,当一个数组要在很多不确定的区间,加上相同的一个数,我们如果每个数都进行加法操作的话,那么复杂度O\left ( mn \right )是平方阶的,非常消耗时间。

如果我们使用差分法,将数组拆分,构造出一个新的拆分数组,通过对数组区间的端点进行加减操作最后将数组合并就能完成原来的操作。这样处理后,时间复杂度降为O\left ( n \right )

差分法的特点:

1.将对于区间的加减操作转化为对于端点的操作。

2.时间复杂度为O\left ( n \right )

3.用于维护区间的增减但不能维护乘除。

4.差分后的序列比原来的数组序列多一个数。

//读入原始数据
输入n,m
原始数组 a[]
差分数组 b[]

for i(1-n)
   输入a[i]

//差分
for i(1-n)
   b[i]=a[i]-a[i-1]

//m次区间操作

while(m--)
    输入l,r,value
    区间加法改为:
    b[l]+=value
    b[r+1]-=value
    区间减法改为:
    b[l]-=value
    b[r+1]+=value


//差分还原
for i(1-n)
   a[i]=b[i]+a[i-1]

例题:大学里的树木要打药

题目

教室外有N棵树,根据不同的位置和树种,学校要对其上不同的药。因为树的排列成线性,且非常长,我们可以将它们看作一条直线给他们编号。树的编号从0~N-1且N<1e6。

对于树的药是成区间分布的,比如3-5号的树靠近下水道,所以它们要用驱蚊虫的药,20-26号的树,它们排水不好,容易涝所以要给他们促进根系的药。诸如此类,每种不同的药要花不同的钱。

现在已知共有M个这样的区间,并且给你每个区间花的钱,请问最后,这些树木花了多少药费。

输入

每组输入的第一行有两个整数N和M。N代表马路的共计多少棵树,M代表区间的数目,N和M之间用一个空格隔开。

接下来的M行每行包含三个不同的整数,用一个空格隔开,表示一个区域的起始点L和终止点R的坐标,以及花费。

输出

输出包含一行,这一行只包含一个整数,所有的花费。

解析

1.利用b[i]=a[i]-a[i-1]差分式。这里由于开始时都是0,可以用,但是用完都还是0,所以没有意义,直接跳过就可以。

2.依次读入区间的值,然后将对于区间的操作转化为对于区间端点操作加减。所以数目整体区间要右移一位。对于每个[l,r]区间的加减操作都转化为对端点l,r+1的操作。

3.差分还原。

#include<bits/stdc++.h>
using namespace std;
int b[100005],a[100005];
int main(){
	int n,m;
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		b[i]=a[i]-a[i-1];
	}
	while(m--){
		int l,r,value;
		cin>>l>>r>>value;
		l+=1;
		r+=1;
		b[l]+=value;
		b[r+1]-=value;
	}
	long long sum=0;
	for(int i=1;i<=n;i++){
		a[i]=b[i]+a[i-1];
		sum+=a[i];
	}
	cout<<sum<<endl;
	return 0;
}

前缀和

前缀和也是主要用于处理区间问题。

前缀和是指序列的前n项和,可以理解为数学上的数列的前n项和。当对于某一个区间进行多次询问[l,r]的和时,如果正常处理,那么我们每次都要从[l,r],查询N次,那么时间复杂度也是平方阶的。

如果我们使用前缀和,构造一个前缀和数组,通过对端点的值的减法就能O(1)求出[l,r]的和,然后N次查询,时间复杂度就能降到O(N)。

前缀和的特点:

1.将对于区间的求和操作转化为对于端点值的减法的操作。

2.区间求和操作的时间复杂度为O(1).

3.数组存放时从1开始。

4.前缀和数组比原来的数组序列多一个数,第0个。

例题:大学里的树木要维护

题目

教室外有N棵树,根据不同的位置和树种,学校要对其上不同的药。因为树的排列成线性,且非常长,我们可以将它们看作一条直线给他们编号。树的编号从0~N-1且N<1e6。

由于已经维护了多年,每一棵树都由学校的园艺人员进行了维护费用的统计。每棵树的前期维护费用各不相同,但是由于未来需要打药,所以有些树木的维护费用太高的话,就要重新种植。由于维护费用也成区间分布,所以常常需要统计一个区间的树木的维护开销。

现在园艺想知道,某个区间内的树木维护开销是多少,共计M个区间需要查询。

输入

每组输入的第一行有两个整数N和M。N代表马路的共计多少棵树,M代表区间的数目,N和M之间用一个空格隔开。

接下来的一行,包含N个数,每个数之间用一个空格隔开。

接下来的M行,每行包含两个不同的整数,用一个空格隔开,表示一个区域的起始点L和终止点R的坐标。

输出

输出包含一行,这一行只包含一个整数,所有的花费。

解析

1.利用sum[i]=a[i]+sum[i-1]前缀和式在输入时求出前缀和。

2.依次读入区间的值,然后将对于区间的操作转化为对于区间端点操作加减。对于每个[l,r]区间的求和操作都转化为对端点[r]-[l-1]的操作。

3.输出答案。

#include<bits/stdc++.h>
using namespace std;
int a[100005],sum[100005];
int main(){
	int n,m;
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		sum[i]=a[i]+sum[i-1];
	}
	while(m>0){
		m-=1;
		int l,r;
		cin>>l>>r;
		cout<<sum[r]-sum[l-1]<<endl;
	}
	return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

美易官方:美联储六月降息概率已跌至50%以下

美联储六月降息概率已跌至50%以下&#xff0c;这一消息在全球金融市场上引起了广泛的关注和讨论。市场分析师们纷纷对此进行解读&#xff0c;投资者们也在重新评估自己的投资策略。本文将从多个角度对这一事件进行深入分析&#xff0c;并探讨其可能对市场产生的影响。 3月ISM制…

用html写个简历吧!听起来就很酷!

用纯html写个个人简历&#xff01;首先得先找个模板&#xff01; 一个优秀模板所应该具有的素质&#xff1f; 简单&#xff1f; 仅仅一个html页面&#xff0c;完全没有乱七八糟&#xff0c;保证学的明明白白。 简单整洁&#xff1f; 该有的内容一个不少&#xff01; 一个完…

STM32学习笔记(9_2)- USART串口外设

无人问津也好&#xff0c;技不如人也罢&#xff0c;都应静下心来&#xff0c;去做该做的事。 最近在学STM32&#xff0c;所以也开贴记录一下主要内容&#xff0c;省的过目即忘。视频教程为江科大&#xff08;改名江协科技&#xff09;&#xff0c;网站jiangxiekeji.com 在STM3…

深入探索Yarn:安装与使用指南

Yarn 是一个由 Facebook 开发的 JavaScript 包管理器&#xff0c;旨在提供更快、更可靠的包管理体验。它与 npm 类似&#xff0c;但在某些方面更加高效和可靠。本文将介绍如何安装 Yarn&#xff0c;并展示如何使用它来管理 JavaScript 项目的依赖。 1. 安装 Yarn Yarn 可以通…

软件测试用例(1)

测试用例的基本要素 回顾一下测试用例的概念: 测试用例是为了实施测试而向被测试的系统提供的一组集合, 这组集合包含: 测试环境, 操作步骤, 测试数据, 预期结果等要素. 好的测试用例是一个不熟悉业务的人也能依据用例来很快的进行测试. 评价测试用例的标准: 对比好坏用例…

80后、90后记忆中的经典软件正在老去,新型平台在悄然崛起

当今软件领域&#xff0c;可谓是瞬息万变。 更新迭代频繁&#xff0c;部分软件稳坐电脑桌面&#xff0c;而有些&#xff0c;则沦为记忆深处的图标&#xff0c;在岁月长河中悄然“凋零”。 试问&#xff0c;那些曾属于80、90后独特记忆的经典软件&#xff0c;你还记得多少&…

RAG 新进展:伊克罗德信息、墨奇科技战略合作,共研低成本快速定制大模型

AIGC 持续火爆&#xff0c;AI 核心技术百花齐放。过去一年里&#xff0c;大语言模型 LLM&#xff08;Large Language Model&#xff09;与 AIGC 引爆整个技术界&#xff0c;不过让 AIGC 落地千行百业&#xff0c;实现商业化使用&#xff0c;则面临更多挑战。例如&#xff0c;训…

Centos7 elasticsearch-7.7.0 集群搭建,启用x-pack验证 Kibana7.4用户管理

前言 Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎&#xff0c;能够解决不断涌现出的各种用例。 作为 Elastic Stack 的核心&#xff0c;它集中存储您的数据&#xff0c;帮助您发现意料之中以及意料之外的情况。 环境准备 软件 …

上周六的南京,近百位南京PG圈爱好者都来啦!

3月30日&#xff0c;IvorySQL 社区携手中国开源软件联盟 PostgreSQL 分会以及Techtalk 社区等合作伙伴&#xff0c;在南京成功举办 PostgreSQL 技术峰会及 IvorySQL南京用户组&#xff0c;现场吸引了近百位南京PG圈技术爱好者和资深开发小伙伴们的热情参与&#xff01; 浪潮集团…

基于8086直流电机调速控制系统设计

**单片机设计介绍&#xff0c;基于8086直流电机调速控制系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于8086的直流电机调速控制系统设计概要主要涵盖了系统的核心功能、硬件组成、软件设计以及应用场景等方面。以下…

C,C++——指针详解

目录 1.指针的基本概念 代码示例&#xff1a; 2.指针所占内存空间 代码示例&#xff1a; 3.空指针和野指针 代码示例&#xff1a; 4.const修饰指针 代码示例&#xff1a; 5.指针和数组 代码示例&#xff1a; 6.指针和函数 代码示例&#xff1a; 7.指针&#x…

python pip使用

windowsR打开cmd 跳转到安装python解释器的路径下 我装的是官网3.9版本下到了D盘的vspython配置下 假如要装jieba pip install jieba Successfully installed jieba-0.42.1有这个代表成功安装 安装好程序就可以使用了&#xff0c;打开IDLE jieba库用来分词&#xff0c;红…

java+mysql图书管理系统制作教程v1.0.0完整版

本人QQ&#xff1a;2711138299&#xff0c;需要源码的可以加我,附带数据库备份文件&#xff0c;以及建立数据库表 下面是我写在有道云笔记里面的教程&#xff0c;由于复制粘贴后&#xff0c;代码都混乱在一起了&#xff0c;不建议大家观看&#xff0c;所以想看详细教程的也可以…

苹果手机黑屏打不开怎么办?5种方法让你轻松应对

苹果手机以其卓越的性能和流畅的操作体验赢得了全球用户的喜爱。然而&#xff0c;就像其他电子产品一样&#xff0c;苹果手机偶尔也会遇到一些问题。其中&#xff0c;苹果手机黑屏打不开是许多用户都曾遇到过的困扰。当您按下电源键&#xff0c;却发现手机屏幕一片漆黑&#xf…

2024如何做好跨境电商?7个步骤详细讲解

近几年来&#xff0c;随着互联网的发展&#xff0c;国内外的商业贸易越来越流畅&#xff0c;直播电商的火爆也带动着一大批相关的产业链发展&#xff0c;其中跨境电商就是尤为突出的一个。尽管在国内做跨境电商的企业数量非常之多&#xff0c;但仍有许多新人争相入局&#xff0…

QT-自定义参数设计框架软件

QT-自定义参数设计框架软件 前言一、演示效果二、使用步骤1.应用进行参数注册2.数据库操作单例对象3.参数操作单例对象 三、下载链接 前言 常用本地数据参数通常使用的是xml等文本的格式&#xff0c;进行本地的数据参数的存储。这种参数的保存方式有个致命的一点&#xff0c;就…

gin源码分析(1)--初始化中间件,路由组与路由树

目标 关于gin.Default()&#xff0c;gin.New()&#xff0c;gin.Use()group与子group之间的关系&#xff0c;多group与middleware之间关系中间件的类型&#xff0c;全局&#xff0c;group&#xff0c;get&#xff0c;不同类型的中间件什么时候执行。中间件 next 和abort行为如何…

用Qt浅写一个流程动画 + 随便聊聊

恍然间&#xff0c;已经有段时间没有正儿八紧的写点东西了。前段时间从前东家离职&#xff0c;最近才到新东家。这个年过得是工作若干年来最长的一次。说是武汉的就业行情不太好&#xff0c;但是我感觉也没太差&#xff0c;可能我的要求也不高吧。医疗、自动化、半导体的offer各…

JavaScript 数组元素交互最优解

利用 ES6 解构赋值&#xff1a; let arr [1, 2, 3, 4, 5];// 交互下标 1,4 元素的值 [arr[1], arr[4]] [arr[4], arr[1]];// 输出&#xff1a; [1, 5, 3, 4, 2] console.log(arr);浏览器控制台效果&#xff1a;

PCB项目设计-必知必会

版本控制 V0.0 2024-4-2 ini 一、PCB项目设计的基本概念 留空 二、原理图关键知识点 留空 三、PCB关键知识点 3.1首先看完这两篇 技术指导&#xff1a;下单前技术员必看 嘉立创PCB工艺加工能力范围说明 3.2焊盘和过孔的主要区别 焊盘主要用于器件引脚的焊接和固定&am…