差分与前缀和

目录

差分法

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

前缀和

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

差分法

差分法的应用主要是用于处理区间问题,当一个数组要在很多不确定的区间,加上相同的一个数,我们如果每个数都进行加法操作的话,那么复杂度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]+=valueb[r+1]-=value区间减法改为:b[l]-=valueb[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;
}

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

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

相关文章

C++初学者:如何优雅地写程序

我喜欢C语言的功能强大&#xff0c;简洁&#xff0c;我也喜欢C#的语法简单&#xff0c;清晰&#xff0c;写起来又方便好用。 一、为什么不用C语言写程序。 C语言用来做题目&#xff0c;考试研究是很方便的&#xff0c;但是用来写程序做软件&#xff0c;你就会发现&#xff0c…

低噪声、轨至轨运算放大器芯片—— D721、D722、D724,适合用于音频领域

应用领域 D721、D722、D724是我们推荐的三款低噪声、轨至轨运算放大器芯片&#xff0c;其中D721为单运放&#xff0c;D722为双运放&#xff0c;D724为四运放。适合用于音频领域、传感器等的信号放大处理&#xff0c;比如K歌宝、音响、测距、滤波器、AD转换器前级信号处理等等。…

MES系统主要功能有哪些?

本文将为大家讲解&#xff1a;1、MES系统是什么&#xff1f;2、MES系统主要功能有哪些&#xff1f;3、MES系统的价值何在&#xff1f;4、使用MES系统的案例。 一、MES系统是什么&#xff1f; 正所谓“磨刀不误砍柴工”&#xff0c;咱们先来了解一下什么是MES系统。MES系统&am…

蓝桥杯第1593题——二进制问题

题目描述 小蓝最近在学习二进制。他想知道 1 到 N 中有多少个数满足其二进制表示中恰好有 K 个 1。你能帮助他吗&#xff1f; 输入描述 输入一行包含两个整数 N 和 K。 输出描述 输出一个整数表示答案。 输入输出样例 示例 输入 7 2输出 3评测用例规模与约定 对于 30% …

OpenAI官宣,ChatGPT免登录使用

昨天&#xff0c;就在愚人节当天&#xff0c;OpenAI突然宣布ChatGPT3.5向所有人开放&#xff0c;意思是即使没有注册OpenAI的账号&#xff0c;也能体验ChatGPT&#xff0c;就像浏览器一样&#xff0c;联接即可使用。 消息一出&#xff0c;OpenAI的官网直接被大量的用户挤挂了。…

Python中的全栈开发前端与后端的完美融合【第160篇—全栈开发】

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 Python中的全栈开发&#xff1a;前端与后端的完美融合 全栈开发已成为当今软件开发领域中的…

c语言:预处理详解

1. 预定义符号 C语⾔设置了⼀些预定义符号&#xff0c;可以直接使⽤&#xff0c;预定义符号也是在预处理期间处理的。 __FILE__ //进⾏编译的源⽂件 __LINE__ //⽂件当前的⾏号 __DATE__ //⽂件被编译的⽇期 __TIME__ //⽂件被编译的时间 __STDC__ //如果编译器遵循ANSI …

SpringBoot登录校验(三)JWT令牌

SpringBoot 登录认证&#xff08;一&#xff09;-CSDN博客 SpringBoot 登录认证&#xff08;二&#xff09;-CSDN博客 SpringBoot登录校验&#xff08;三&#xff09;-CSDN博客 前面我们介绍了传统的会话跟踪技术cookie和sesstion&#xff0c;本节讲解令牌技术。这里所提到的…

golang语言系列:Authentication、OAuth、JWT 认证策略

云原生学习路线导航页&#xff08;持续更新中&#xff09; 本文是 golang语言系列 文章&#xff0c;主要对编程通用技能 Authentication、OAuth、JWT 认证策略 进行学习 1.Basic Authentication认证 每个请求都需要将 用户名密码 进行base64编码后&#xff0c;放在请求头的Aut…

uniapp 微信小程序 输入框跟随手机键盘弹起

需求&#xff1a;手机键盘弹起后&#xff0c;页面底部的输入框跟随弹起&#xff0c;且页面不被顶上去 html: <textareaclass"textinput"placeholder-class"input-place"auto-height:maxlength"2000"v-model"text"placeholder"…

每天五分钟计算机视觉:使用神经网络完成人脸的特征点检测

本文重点 我们上一节课程中学习了如何利用神经网络对图片中的对象进行定位,也就是通过输出四个参数值bx、by、bℎ和bw给出图片中对象的边界框。 本节课程我们学习特征点的检测,神经网络可以通过输出图片中对象的特征点的(x,y)坐标来实现对目标特征的识别,我们看几个例子。…

关于v114之后的chromedriver及存放路径

使用selenium调用浏览器时&#xff0c;我一直调用谷歌浏览器&#xff0c;可浏览器升级后&#xff0c;就会再次遇到以前遇到过的各种问题&#xff0c;诸如&#xff1a;1、怎么关闭浏览器更新&#xff1b;2、去哪儿下载chromedriver&#xff1b;3、114版本之后的驱动去哪儿下载&a…

鸿蒙原生应用开发-网络管理HTTP数据请求

一、场景介绍 应用通过HTTP发起一个数据请求&#xff0c;支持常见的GET、POST、OPTIONS、HEAD、PUT、DELETE、TRACE、CONNECT方法。 二、接口说明 HTTP数据请求功能主要由http模块提供。 使用该功能需要申请ohos.permission.INTERNET权限。 涉及的接口如下表&#xff0c;具体的…

【深耕 Python】Data Science with Python 数据科学(7)书352页练习题

写在前面 关于数据科学环境的建立&#xff0c;可以参考我的博客&#xff1a; 【深耕 Python】Data Science with Python 数据科学&#xff08;1&#xff09;环境搭建 往期数据科学博文&#xff1a; 【深耕 Python】Data Science with Python 数据科学&#xff08;2&#xf…

蓝桥杯算法题——暴力枚举法

先估算这个数小于3的50次方 cnt0 for i in range(50):for j in range(50):for k in range(50):a3**ib5**jc7**kif a*b*c<59084709587505:cnt1 print(cnt-1)#当ijk都为0时&#xff0c;a*b*c1不是幸运数字所以要减去

流量卡VS随身WIFI?手把手教你怎么选!流量卡和随身WiFi哪个好?流量卡和随身WiFi的区别!流量卡和随身WiFi哪个更划算?流量卡和随身WiFi怎么选?

出门在外&#xff0c;网络、流量已经成为了我们必不可少需要考虑的问题&#xff01;在选择如何获取大流量时&#xff0c;很多人都选择困难&#xff1a;是选择一张流量卡&#xff0c;还是一个随身WIFI&#xff1f; 今天&#xff0c;将从功能与形态、信号、适用场景、限制条件等多…

简单而复杂的Python

Python是一种简单&复杂的编程语言。简单的时候可以到极致&#xff1a; print(hello world!)另一方面&#xff0c;Python 也具有许多复杂的语法特性&#xff0c;例如面向对象编程、装饰器、迭代器、生成器等等。这些特性使得 Python 适用于各种不同的编程任务和项目。 当我…

四信AI视频盒成为时代“卷王”的五大秘诀

2023年12月中央经济工作会议聚焦“发展新质生产力”和 “加快推动人工智能发展”&#xff0c;2024年国务院国资委召开“AI赋能 产业焕新”中央企业人工智能专题推进会&#xff0c;推动中央企业在人工智能领域实现更好发展、发挥更大作用&#xff0c;越来越多的利好人工智能政策…

AR智能眼镜解决方案_MTK平台安卓主板硬件芯片方案开发

AR智能眼镜&#xff0c;是一个可以让现场作业更智能的综合管控设备。采用移动互联网、大数据和云计算等技术&#xff0c;现场数据的采集与分析&#xff1b;同时实现前端现场作业和后端管理的实时连动、信息的同步传输与存储。让前端现场作业更加智能&#xff0c;后端管理更加高…

自己动手写数据库:基于哈希的静态索引设计

数据库设计中有一项至关重要的技术难点&#xff0c;那就是给定特定条件进行查询时&#xff0c;我们需要保证速度尽可能快。假设我们有一个 STUDENT 表&#xff0c;表中包含学生名字&#xff0c;年龄&#xff0c;专业等字段&#xff0c;当我们要查询给定年龄数值的记录&#xff…