差分个人见解(一)

news2024/12/23 5:35:09

差分个人见解(一)

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

一维差分

什么是差分

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

假设 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循环是 可以合并在一起写的,如果你的思路清晰了,就合并着写。


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

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

相关文章

基于深度强化学习算法的火力-目标分配方法

源自&#xff1a;指挥控制与仿真 作者&#xff1a;李伟光 陈栋 注&#xff1a;若出现无法显示完全的情况&#xff0c;可 V 搜索“人工智能技术与咨询”查看完整文章 摘 要 针对火力-目标分配问题解空间较大、离散、非线性等特点,提出了一种基于DQN的深度强化学习算法,通过…

算法02 递归算法及其相关问题

递归 在编程中&#xff0c;我们把函数直接或者间接调用自身的过程叫做递归。 递归处理问题的过程是&#xff1a;通常把一个大型的复杂问题&#xff0c;转变成一个与原问题类似的&#xff0c;规模更小的问题来进行求解。 递归的三大要素 函数的参数。在用递归解决问题时&…

大模型赛道有前景吗?

前言 随着人工智能技术的飞速发展&#xff0c;大模型作为新一代AI技术的核心驱动力&#xff0c;正在全球范围内掀起一场科技革命。在这个浪潮中&#xff0c;大模型赛道以其巨大的发展潜力、广泛的应用前景&#xff0c;成为了众多企业和投资者关注的焦点。本文将从多个角度探讨…

VirtualHere 允许通过网络远程使用 USB 设备,就像本地连接一样!

传统上&#xff0c;USB 设备需要直接插入计算机才能使用。有了 VirtualHere&#xff0c;就不再需要这样做&#xff0c;网络本身就变成了传输 USB 信号的电缆&#xff08;也称为 USB over IP、USB/IP、USB over WiFi、USB over Ethernet、USB 设备服务器&#xff09;。 此 USB …

振弦采集仪在水利工程中的应用与效果评估

振弦采集仪在水利工程中的应用与效果评估 河北稳控科技振弦采集仪是一种用于测量和监测结构振动的设备&#xff0c;广泛应用于水利工程中。它能够实时监测结构的振动情况&#xff0c;帮助工程师评估结构的安全性和稳定性。 在水利工程中&#xff0c;振弦采集仪主要用于以下几个…

JS 中的各种距离 scrollTop?clientHeight?

元素的各种距离 DOM 对象 属性描述offsetWidth只读&#xff0c;返回元素的宽度&#xff08;包括元素宽度、内边距和边框&#xff0c;不包括外边距&#xff09;offsetHeight只读&#xff0c;返回元素的高度&#xff08;包括元素高度、内边距和边框&#xff0c;不包括外边距&am…

VS2019中添加FFTW3库 + cmake工程

一、FFTW3官网 http://www.fftw.org/install/windows.html 二、我这里是选的64位的版本&#xff0c;可根据自己的需要选择对应的版本 三、解压得到 四、根据官网的说明&#xff0c;需进行编译生成.lib文件 4.1 在解压目录打开cmd 4.2 生成 .lib 文件 终端依次输入 lib /machine…

解决:安装MySQL 5.7 的时候报错:unknown variable ‘mysqlx_port=0.0‘

目录 1. 背景2. 解决步骤 1. 背景 吐槽1&#xff0c;没被收购之前可以随便下载&#xff0c;现在下载要注册登录吐槽2&#xff0c;5.7安装到初始化数据库的时候就会报错&#xff0c;而8.x的可以一镜到底&#xff0c;一开始以为是国区的特色问题&#xff0c;google了一圈&#x…

动力学仿真平台:让模型配置与仿真测试更高效!

背景概述 动力学仿真平台是一种基于计算机技术的模拟工具&#xff0c;旨在模拟和分析物理系统中的动力学行为。通过建立数学模型&#xff0c;并借助高效的数值计算方法来模拟复杂系统的运动规律&#xff0c;为科研、设计、工程等领域提供重要的决策支持。动力学仿真平台的重要性…

Python高效处理海量气溶胶数据;MODIS和CALIPSO气溶胶数据下载、处理与反演分析

目录 专题一 碳中和下气溶胶的研究意义 专题二 夯实Python语言基础及代码讲解 专题三 MODIS气溶胶数据处理与反演分析 专题四 CALIPSO气溶胶数据处理及反演分析 专题五 总结与扩展 更多应用 在当前全球气候变化和环境污染问题日益突出的背景下&#xff0c;气溶胶研究显得…

Codeforces Round 950 G. Yasya and the Mysterious Tree 【树上异或和差分、01Trie】

G. Yasya and the Mysterious Tree 题意 给定一颗 n n n 个节点的树&#xff0c;每条边有一个初始的权值 现在定义两种操作&#xff1a; ^ y \; y y&#xff0c;给所有的边的权值异或上 y y y? u x u \; x ux&#xff0c;在树上任选一个不等于 u u u 的点&#xff0c;在…

用 Azure OpenAI 服务开发生成式 AI

简介 在当今迅速发展的技术环境中&#xff0c;生成式人工智能&#xff08;AI&#xff09;成为了众多企业创新和优化业务流程的重要工具。微软的 Azure OpenAI 服务为开发生成式 AI 解决方案提供了强大的平台和工具。本文将介绍如何利用 Azure OpenAI 服务开发生成式 AI 解决方…

Flink作业执行之 2.算子 StreamOperator

Flink作业执行之 2.算子 StreamOperator 前文介绍了Transformation创建过程&#xff0c;大多数情况下通过UDF完成DataStream转换中&#xff0c;生成的Transformation实例中&#xff0c;核心逻辑是封装了SimpleOperatorFactory实例。 UDF场景下&#xff0c;DataStream到Transf…

免费听歌,电脑或手机免费听歌,落雪音乐安装详细步骤

近年来&#xff0c;由于资本的力量导致各种收费&#xff0c;看个电视想听歌都必须要付费了&#xff0c;否则你听不完整&#xff0c;吃相非常难看&#xff0c;特别是电视&#xff0c;吸血鬼式吸收各种会员费&#xff0c;各种APP也是铺天盖地的广告&#xff0c;渐渐迷失了自我&am…

【C++】AVL树/红黑树实现及map与set的封装

前言 【C】二叉树进阶&#xff08;二叉搜索树&#xff09; 这篇文章讲述了关于二叉搜索树知识&#xff0c;但是二叉搜索树有其自身的缺陷&#xff0c;假如往树中插入的元素有序或者接近有序&#xff0c;二叉搜索树就会退化成单支树&#xff0c;时间复杂度会退化成O(N)&#xff…

CCAA质量管理体系 (2021)

一、考试大纲 中 国 认 证 认 可 协 会 质量管理体系基础考试大纲 第 1 版 文件编号&#xff1a;CCAA-TR-105-01:2021 发布日期&#xff1a;2021 年 3 月 2 日 实施日期&#xff1a;2021 年 4 月 1 日 质量管理体系基础考试大纲&#xff08;第 1 版&#xff09;1.总则 本大…

大数据集成平台建设方案(Word方案)

基础支撑平台主要承担系统总体架构与各个应用子系统的交互&#xff0c;第三方系统与总体架构的交互。需要满足内部业务在该平台的基础上&#xff0c;实现平台对于子系统的可扩展性。基于以上分析对基础支撑平台&#xff0c;提出了以下要求&#xff1a; 基于平台的基础架构&…

LabVIEW电源适应能力检测系统

随着工业自动化程度的提高&#xff0c;电源质量直接影响设备的稳定运行。利用LabVIEW开发一个单相电源适应能力检测系统&#xff0c;该系统通过智能化和自动化测试&#xff0c;提高了测试效率&#xff0c;减少了人为错误&#xff0c;保证了电源质量的可靠性。 项目背景 在现代…

软件系统设计开发规程(Word文件)

技术解决方案过程包括&#xff1a; 1、选择最佳解决方案&#xff1b; 2、制定架构设计&#xff1b; 3、制定概要设计&#xff1b; 4、制定详细设计和数据库设计&#xff1b; 5、利用准则进行接口设计&#xff1b; 6、实现设计&#xff1b; 7、进行单元测试&#xff1b; 8、进行…

知乎社招1年Go开发123+HR面经,期望22k

面经哥只做互联网社招面试经历分享&#xff0c;关注我&#xff0c;每日推送精选面经&#xff0c;面试前&#xff0c;先找面经哥 一面‍ 0、自我介绍 1、你才工作一年为什么就想找机会了&#xff08;为什么想跳&#xff09;【甩锅给公司&#xff0c;反正不是我的问题】 2、对…