算法刷题笔记 差分(C++实现)

文章目录

    • 差分概述
    • 题目描述
    • 解题思路
    • 实现代码

差分概述

  • 在我的博文 算法刷题笔记 前缀和和 算法刷题笔记 子矩阵的和 中,曾介绍了前缀和算法。前缀和是指对于一个原始数组,我们构建一个含有相同元素个数的辅助数组,其中辅助数组的下标为i的元素,是原始数组中下标为零的元素一直到下标为i的元素的求和结果。
  • 差分算法可以认为是前缀和算法的逆运算。对于原始数组,同样构造一个和该数组元素个数相同的辅助数组,其中辅助数组的第一个元素和原始数组相同,之后辅助数组中下标为i的元素即为原始数组中下标为i的元素和下标为i-1的元素的差。这样,将辅助数组中的前i项相加后,得到的结果即为原始数组中的第i项元素。
  • 差分的主要应用场景为:当需要多次对一个数组中不同段的元素都加上一个数时,直接使用原始数组的运算时间复杂度会更高,而使用差分数组的运算复杂度会更低。

题目描述

  • 输入一个长度为n的整数序列。
  • 接下来输入m个操作,每个操作包含三个整数l,r,c,表示将序列中[l,r]之间的每个数加上c
  • 请你输出进行完所有操作后的序列。

输入格式

  • 第一行包含两个整数nm
  • 第二行包含n个整数,表示整数序列。
  • 接下来m行,每行包含三个整数lrc,表示一个操作。

输出格式

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

数据范围

  • 1 ≤ n,m ≤ 100000,
  • 1 ≤ l ≤ r ≤ n,
  • −1000 ≤ c ≤ 1000,
  • −1000 ≤ 整数序列中元素的值 ≤ 1000

解题思路

  • 第一步:数据输入。首先获取用户输入的n和m,并存储原始数组。考虑到执行效率,选用C语言中效率更高的scanf函数输入,而非C++中的cin输入;由于数组的大小不会超过100000,因此构建一个大小为100010的静态数组(大10个单元防止越界)。
  • 第二步:构建差分数组。按照差分数组的定义构建差分数组即可。
  • 第三步:执行区间加法。为了将原始数组内某个区间内的所有元素都增加一个值,只需要将辅助数组中区间左端点增加该值,然后在右端点删除该值即可。
  • 第四步:结果输出。通过迭代求和,输出最终处理完成的原始数组。

实现代码

#include <cstdio>const int N(1e5 + 10);
int arr[N];
int dif_arr[N];int main(void)
{//原始数组输入部分int n, m;scanf("%d %d", &n, &m);int x;for(int i(0); i < n; ++i) scanf("%d", &arr[i]);//差分数组构造部分dif_arr[0] = arr[0];for(int i(1); i < n; ++i) dif_arr[i] = arr[i] - arr[i-1];//操作输入部分int l, r, c;for(int i(0); i < m; ++i)  {scanf("%d %d %d", &l, &r, &c);dif_arr[l - 1] += c;dif_arr[r] -= c;}//结果输出部分int sum = 0;for(int i(0); i < n; ++i) {sum += dif_arr[i];printf("%d ", sum);}return 0;
}

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

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

相关文章

Java(六)——抽象类与接口

文章目录 抽象类和接口抽象类抽象类的概念抽象类的语法抽象类的特性抽象类的意义 接口接口的概念接口的语法接口的特性接口的使用实现多个接口接口与多态接口间的继承抽象类和接口的区别 抽象类和接口 抽象类 抽象类的概念 Java使用类实例化对象来描述现实生活中的实体&…

【第一节】从C语言到C++

目录 一、面向对象编程 1.早期概念 2.发展与普及 3. 现代发展 二、从C语言到C 1.关于堆内存的使用 2.关于函数重载 3.关于默认参数 4.引用 5.引用参数 6.作用域符号 三、C的输入输出机制 一、面向对象编程 面向对象编程&#xff08;Object-Oriented Programming&am…

java 对接农行支付相关业务(一)

文章目录 java整合农行支付1:业务需求了解2:第三方App接入农行支付流程2.1 java 集成农行依赖2.2 java配置农行支付相关证书信息2.2.1:首先我们要配置ConfigSource 文件2.2.2: 配置TrustMerchant 文件信息3:接入农行支付等相关api接口java整合农行支付 技术背景:idea+jd…

如何进一步缩短Python性能

1、问题背景 给定一个(x,y)处的节点网格&#xff0c;每个节点有一个值(0…255)从0开始。有N个输入坐标&#xff0c;每个坐标在(0…x, 0…y)的范围内。一个值Z&#xff0c;它定义了节点的“邻域”。增加输入坐标及其邻居节点的值。网格边缘之外的邻居被忽略。基准案例&#xff…

专转本上岸别太老实做这三件事

如果你专转本上岸&#xff0c;千万不要当老实人去做这三件事&#xff0c;真的没有必要&#xff0c;不但浪费时间&#xff0c;还会让你提前进入对未来的迷茫期。建议转本人们一定要知道&#xff0c;首先就是不要过度关注学分。因为转本上岸只有两年&#xff0c;我们属于大三&…

spdlog日志库源码:自定义异常类spdlog_ex

自定义异常类spdlog_ex 标准库异常类&#xff08;std::exception&#xff09;系列&#xff0c;能满足大多数使用异常的场景&#xff0c;但对系统调用异常及错误信息缺乏支持。spdlog通过继承std::exception&#xff0c;扩展对系统调用的支持&#xff0c;实现自定义异常类spdlo…

产教协同|暴雨AI算力赋能传媒实践教学

近日&#xff0c;“第七届传媒实践教学创新研讨会暨中国高校影视学会实验教学专业委员会年会”在美丽的山城重庆成功举办。本次大会以“拥抱AI&#xff0c;融合共生”为主题&#xff0c;吸引了来自全国200多所高校、30多家企业以及700多位大视听实践教学产学研用各界专家、学者…

#php-config的作用#

/usr/local/php/bin/php-config php-config 做什么的 php-config 是一个在 PHP 编译和安装过程中生成的实用程序&#xff0c;它提供了关于 PHP 安装配置的信息。这些信息对于其他软件&#xff08;如扩展模块或绑定库&#xff09;在编译时链接到 PHP 运行时环境非常有用。 具体…

Data Lakehouse:你的下一个数据仓库

作者&#xff1a;张友东 StarRocks TSC member/镜舟科技 CTO 数据分析是现代企业和组织决策过程中不可或缺的一部分&#xff0c;数据分析技术经过数十年的发展&#xff0c;需求场景从 BI 报表到数据探寻、实时预测、用户画像等不断丰富&#xff0c;技术架构经历从数据仓库、数据…

如何进行企业的数字化转型?

“企业数字化转型怎么做&#xff1f;” &#xff0c;类似的文章网上有很多&#xff0c;但大多数内容都写得太高深了&#xff0c;一般人看不懂&#xff0c;也用不上... 作为一个践行者&#xff0c;而不是数字化产品的销售员&#xff0c;我跟你说点你能听得懂的。 1、导入信息化…

【AIGC】GPT-4o技术分析-浅谈

GPT-4o&#xff1a;人工智能技术的全新里程碑 一、引言二、GPT系列版本间的对比分析三、GPT-4o的技术能力分析多模态处理能力速度与性能优化情感理解与表达能力 四、个人整体感受五、结语 一、引言 在人工智能技术的浪潮中&#xff0c;OpenAI再次以其卓越的创新能力引领潮流。近…

Java中的打印流PrintStream 和 PrintWriter

PrintStream和PrintWriter在Java中都是用于打印输出的类&#xff0c;但它们之间存在一些明显的区别。以下是关于这两个类的详细解释和比较&#xff1a; PrintStream 基本特性 PrintStream是一个字节打印流&#xff0c;它继承自FilterOutputStream。 主要操作byte流&#xff0…

15.Redis之持久化

0.知识引入 mysql的事务,有四个比较核心的特性. 1. 原子性 2.一致性 3.持久性 >(和持久化说的是一回事)【把数据存储在硬盘 >持久把数据存储茌内存上>不持久~】【重启进程/重启主机 之后,数据是否存在!!】 4.隔离性~ Redis 是一个 内存 数据库.把数据存储在内存中的…

【张量】由可逆线性变换诱导的具有新张量核范数的低秩张量补全(1)

文章目录 由可逆线性变换诱导的具有新张量核范数的低秩张量补全【Low-rank Tensor Completion with a New Tensor Nuclear Norm Induced by Invertible Linear Transform】摘要1.介绍**2. 由变换基的张量-张量积诱导的新的张量核范数**2.2 基于变换的 T-积 诱导的张量核范数 **…

RFID芯片掼蛋牌:高科技与传统玩法结合,游戏体验焕然一新。

火爆“出圈”的掼蛋&#xff0c;是一种玩法相当鲜明的智力游戏。近年来得到了不少的推广和发展&#xff0c;各地举办了各种掼蛋比赛和活动&#xff0c;吸引了大量的参赛者和观众。此外&#xff0c;一些企业和机构也开始将掼蛋作为一种企业文化或者社交活动的方式&#xff0c;通…

灯下黑”挖出国内知名安全平台某BUF的CSRF漏洞

漏洞复现&#xff1a; 漏洞点在删除文章的地方&#xff0c;首先为了测试先发布一篇文章 发布之后我们可以查看文章&#xff0c;注意url中的一串数字&#xff0c;就是这篇文章的id&#xff0c;如下如&#xff1a; 这里的文章id是“271825”&#xff0c;首先抓一下删除文章的数据…

JavaScript基础(十)

上一篇学了各种数组方法&#xff0c;正好先做个练习回忆一下: 排序并去重 我随便写一组数&#xff0c;要求排好并去掉重复的: var arr [2,8,1,7,2,6,1,5,2,7,6,5]; for (var i0; i<arr.length; i){ for (var ji1; j<arr.length; j){ if(arr[i]arr[j]){ arr.splice(j,1)…

LeetCode 474.一和零

没做出来&#xff0c;最后看了解析&#xff0c;看了半天才懂。 我一开始把这个题当成多重背包来做了&#xff0c;因为有0和1两个参数需要考虑&#xff0c;但是中间很多情况不知道怎么处理。后面看了解析才知道这是个01背包问题&#xff0c;0和1都是一个物品上的属性&#xff0c…

Revit二次开发-WPF ProgressBar 执行程序中显示进度条

Revit开发执行命令时如果时间长,界面会顶住,导致用户误以为程序未响应,解决方法:增加WPF ProgressBar 进度条执行程序中显示进度条,提示命令还是进行中, 实现流程: 新建一个WPF,Window启动时加载一个事件Loaded=“Window_Loaded”,用于显示进度条在WPF后台,新建一个异…

安卓自定义UI组件开发流程

安卓自定义ui组件开发流程 开发安卓自定义UI组件的流程大致可以分为以下几个步骤&#xff1a; 确定需求和设计&#xff1a; 确定需要自定义的UI组件的功能和外观。设计组件的交互逻辑和视觉效果。 创建自定义组件类&#xff1a; 创建一个新的Java类&#xff0c;继承自View、V…