差分个人见解(一)

差分个人见解(一)

  • 一维差分
    • 什么是差分
    • 构造差分数组
    • 差分数组的用处
    • 实战演练
      • 题目

一维差分

什么是差分

在这里插入图片描述
前缀和或许你已经了解了,差分其实就是前缀和的逆运算。

假设 a1 到 an 为 b1到 bn 的前缀和。

那么 b1 到 bn,分别就是 a1 到 an 的 差分。

差分的每一项等于 原序列对应项 减去 前一项。

构造差分数组

构造差分数组有两种方式,第一种是利用下列递推公式遍历一遍数组。
在这里插入图片描述
其中 数组 a 为 原数组,数组 b 为要构造的差分数组。

这里跟前缀和那里一样,i 不会 取到 0,数组前都会留一个空位,从1开始存储。

第二种构造方式我们一会 会说到。

差分数组的用处

差分数组可以快速 使一个区间内加上一个数。

我们来看下面的例子,还是假设 a为原序列,数组b 为 a 的差分数组。

假设我们的目标是 3 到 5 这个区间内所有数字都加上 c。
在这里插入图片描述
有了差分数组后,我们可以这样做。

在这里插入图片描述
首先给 b3 加c。

此时我们如果求 数组b 的新前缀和数组,如果覆盖数组a,那么 a3 到 an都会 加上 c。(这个想法很关键)

由于我们的目标是 a3 到 a5 加上 c。

所以需要这样做。
在这里插入图片描述
给 b6 减去c。

这个操作之后,当我们求 数组b 的前缀和数组的时候,a6 到 an 的值都会减去 c。

由此我们便得出了一个公式。

如果我们需要在区间 [ l , r ] 上加一个数 c。

那么我们只需要操作差分数组就可以了,公式如下:
在这里插入图片描述

实战演练

题目

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

接下来输入 m m m 个操作,每个操作包含三个整数 l , r , c l, r, c l,r,c,表示将序列中 [ l , r ] [l, r] [l,r] 之间的每个数加上 c c c

请你输出进行完所有操作后的序列。

输入格式

第一行包含两个整数 n n n m m m

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

接下来 m m m 行,每行包含三个整数 l , r , c l,r,c lrc,表示一个操作。

输出格式

共一行,包含 n n n 个整数,表示最终序列。

数据范围

1 ≤ n , m ≤ 100000 1 \le n,m \le 100000 1n,m100000,
1 ≤ l ≤ r ≤ n 1 \le l \le r \le n 1lrn,
− 1000 ≤ c ≤ 1000 -1000 \le c \le 1000 1000c1000,
− 1000 ≤ 整数序列中元素的值 ≤ 1000 -1000 \le 整数序列中元素的值 \le 1000 1000整数序列中元素的值1000

输入样例:

6 3
1 2 2 1 2 1
1 3 1
3 5 1
1 6 1

输出样例:

3 4 5 3 4 2

准备阶段:
在这里插入图片描述
其中 数组a 用于存储题目当中的输入数据,数组b 为差分 数组。

输入环节:
在这里插入图片描述
接下来需要构造 差分数组。

还记得刚才的那个区间 +c 的公式吗?我们先把这个行为写成一个函数。

在这里插入图片描述
第二种构造差分数组的思路是 假设刚开始的差分数组都是 0,然后 利用这个 addToRange
将数据加到 差分数组中。
在这里插入图片描述
当然也可以用之前的第一种方法。
在这里插入图片描述
在构造完差分数组后,接下来该处理 m 次询问了。

对于每次询问,输入一个区间 和 区间所加的值。
在这里插入图片描述
接着套函数 就可以了。

最后 我们只需要 求 数组 b 对应的前缀和数组。

这里我们将前缀和 数组也放到 数组b 里面,也就是覆盖掉原数组。

在这里插入图片描述
完整代码如下:

#include <iostream>
using namespace std;

const int N = 1e5+10;
int n, m;
int a[N], b[N];

void addToRange(int l, int r, int c)
{
    b[l] += c;
    b[r + 1] -= c;
}

int main()
{
    scanf("%d%d", &n, &m);
    for (int i = 1; i <= n; i++)  scanf("%d", &a[i]);
    
    for (int i = 1; i <= n; i++)  addToRange(i, i, a[i]);
    
    while (m--)
    {
        int l, r, c;
        scanf("%d%d%d", &l, &r, &c);
        addToRange(l, r, c);
    }
    
    for (int i = 1; i <= n; i++) b[i] = b[i] + b[i - 1];
    
    for (int i = 1; i <= n; i++) printf("%d ", b[i]);
    
    return 0;
}


这个代码其实有些地方的for循环是 可以合并在一起写的,如果你的思路清晰了,就合并着写。


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

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

相关文章

2024企业AI应用行动指南(PPT可下载)

如需下载本方案PPT/WORD原格式&#xff0c;诚挚邀请您微信扫描以下二维码加入方案驿站知识星球&#xff0c;获取上万份PPT/WORD解决方案&#xff01;&#xff01;&#xff01;感谢支持&#xff01;&#xff01;&#xff01;

618有哪些好物值得购买?这五款超值科技数码产品别错过!

一年一度的618购物狂欢节即将到来&#xff0c;这是消费者们选购心仪商品的绝佳时机。在众多产品中&#xff0c;科技数码产品一直以来都是备受关注的领域。 它们不仅代表着当下最前沿的技术&#xff0c;还能为我们的生活带来诸多便利。本文将为您推荐五款在618期间值得购买的超值…

【全开源】ChatGPT 机器人公众号小程序h5源码开源交付支持二开

AI机器人系统对接OPENAI&#xff1a;智能互联的无限可能 &#x1f310; 一、引言&#xff1a;AI机器人系统与OPENAI的碰撞 在科技日新月异的今天&#xff0c;AI机器人系统正逐渐渗透到我们生活的各个角落。而当这一智能系统与全球领先的OPENAI技术相结合&#xff0c;又将擦出…

Javaweb---IDEA中使用TomCat插件问题

引言 众所周知我们日常web开发的时候每次对内容进行修改就必须新打一次war包,这个过程太过繁琐,为了大大减少这些步骤,我们使用IDEA中的插件Smart TomCat(如下图所示)这个插件就是把tomcat搬到idea中了,大大减少我们的工作量 操作非常简单,直接install即可,如若无法使用可以重…

轻易云-轻企AI知识库的智能创作与个性化管理

随着人工智能技术的飞速发展&#xff0c;AI助手正逐渐成为我们生活和工作中不可或缺的伙伴。轻易云AI助理&#xff0c;作为这一领域的佼佼者&#xff0c;以其无所不知、无所不能的AI创作模型&#xff0c;为用户带来了前所未有的智能体验。 一、AI创作模型的丰富性 在轻易云AI助…

摄影构图:如何处理对焦、快门、光圈、ISO 以及拍摄方式

写在前面 博文内容涉及摄影对焦模式、快门速度、光圈、ISO以及拍摄方式的简单介绍《高品质摄影全流程解析》 读书笔记整理理解不足小伙伴帮忙指正 &#x1f603; 生活加油 99%的焦虑都来自于虚度时间和没有好好做事&#xff0c;所以唯一的解决办法就是行动起来&#xff0c;认真…

ZYNQ7 Processing System IP核中PS侧Uart的用法

在ZYNQ7 Processing System IP核中集成的UART控制器是一个中全双工异步接收器和发送器&#xff0c;支持广泛的可编程波特率和I/O信号格式&#xff0c;可以适应自动奇偶校验生成和多主机检测模式。 UART操作由配置和模式寄存器控制。使用状态寄存器、中断状态寄存器和调制解调器…

功能测试 之 单模块测试----轮播图、登录、注册

单功能怎么测&#xff1f; 需求分析 拆解测试点 编写用例 1.轮播图 &#xff08;1&#xff09;需求分析 位置&#xff1a;后台--页面--广告管理---广告列表(搜索index页面增加广告位2) 操作完成后需要点击admin---更新缓存,前台页面刷新生效 &#xff08;2&#xff09;拆解…

基于梯度下降的多元线性回归原理

为了展示多元线性回归的迭代过程&#xff0c;我们可以使用梯度下降算法手动实现多元线性回归。梯度下降是一种迭代优化算法&#xff0c;用于最小化损失函数。 我们将以下步骤进行手动实现&#xff1a; 初始化回归系数。计算预测值和损失函数。计算梯度。更新回归系数。重复步…

WebMvcConfigurer配置不当导致鉴权失败

最近同事说他们有个新需求&#xff0c;需要对接口进行加解密&#xff0c;所以他给项目配置了一个拦截器&#xff0c;但这个拦截器直接导致了每个接口鉴权失败&#xff0c;每次调用接口都是提示没有session信息。 公司内的所有java项目是公用同一套基础依赖&#xff0c;所以我也…

差分个人见解(二)

差分个人见解&#xff08;二&#xff09; 二维差分二维差分数组的用途构造二维差分数组实战演练 如果你还不太熟悉一维差分&#xff0c;那么请先学会一维差分。 二维差分 二维差分数组的用途 在一维差分数组中&#xff0c;它的用途是 快速 使一个区间内加上一个数。 那么二…

【产品经理】订单处理2

本次讲解订单初始化成功到ERP系统过程中的后续环节。 一、根据客服备注更新订单信息 初始化订单过程中&#xff0c;若订单中的客服备注信息对订单进行更新&#xff0c;包括可能改收货信息、改商品、加赠品、指定快递等。 注意&#xff1a;更新订单的过程中要注意订单当前状…

漫步者M125便携式蓝牙音箱首发价169

目录 一、音箱音质方面 二、音箱续航方面 三、音箱外观设计 四、音箱连接方面 五、音效方面 六、总结 在这个快节奏的时代&#xff0c;音乐成为了许多人生活中不可或缺的调味剂&#xff0c;一款优质的便携蓝牙音箱&#xff0c;无疑是旅行、户外或居家休闲的理想伴侣。近日…

基于 Redis 实现分布式缓存

一、单节点 Redis 的问题 1.1 存在的问题 1、数据丢失问题&#xff1a;Redis 是内存存储&#xff0c;服务重启可能会丢失数据。 2、并发能力问题&#xff1a;单节点 Redis 并发能力虽然不错&#xff0c;但也无法满足如 618 这样的高并发场景。 3、故障恢复问题&#xff1a;如果…

【机器学习】机器学习赋能医疗健康:从诊断到治疗的智能化革命

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀目录 &#x1f4d2;1. 引言&#x1f4d9;2. 机器学习在疾病诊断中的应用&#x1f9e9;医学影像分析&#xff1a;从X光到3D成像带代码&#x1…

【B站大神推荐】OBS Studio史上最好用的免费视频录制直播神器,绝无仅有!

&#x1f680; 个人主页 极客小俊 ✍&#x1f3fb; 作者简介&#xff1a;程序猿、设计师、技术分享 &#x1f40b; 希望大家多多支持, 我们一起学习和进步&#xff01; &#x1f3c5; 欢迎评论 ❤️点赞&#x1f4ac;评论 &#x1f4c2;收藏 &#x1f4c2;加关注 前言 你是不是…

一套轻量、安全的问卷系统基座,提供面向个人和企业的一站式产品级解决方案

大家好&#xff0c;今天给大家分享的是一款轻量、安全的问卷系统基座。 XIAOJUSURVEY是一套轻量、安全的问卷系统基座&#xff0c;提供面向个人和企业的一站式产品级解决方案&#xff0c;快速满足各类线上调研场景。 内部系统已沉淀 40种题型&#xff0c;累积精选模板 100&a…

2024年【公路水运工程施工企业安全生产管理人员】报名考试及公路水运工程施工企业安全生产管理人员考试试卷

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年公路水运工程施工企业安全生产管理人员报名考试为正在备考公路水运工程施工企业安全生产管理人员操作证的学员准备的理论考试专题&#xff0c;每个月更新的公路水运工程施工企业安全生产管理人员考试试卷祝您顺…

Kettle 数据抽取工具使用教程:从入门到实战

一、简介 Kettle 是 Pentaho Data Integration (PDI) 的一个组成部分&#xff0c;是一个开源的数据集成工具。它被广泛用于数据的抽取、转换和加载 (ETL) 过程。Kettle 提供了一个易于使用的图形界面&#xff0c;可以轻松设计和执行 ETL 流程。 github 源码地址&#xff1a;ht…

LLM 大模型学习:量化技术、QLoRA、量化库

模型的推理过程是一个复杂函数的计算过程&#xff0c;这个计算一般以矩阵乘法为主&#xff0c;也就是涉及到了并行计算。一般来说&#xff0c;单核CPU可以进行的计算种类更多&#xff0c;速度更快&#xff0c;但一般都是单条计算&#xff1b;而显卡能进行的都是基础的并行计算&…