蓝桥杯一维差分 | 算法基础

简单说两句

✨ 正在努力的小新~
💖 超级爱分享,分享各种有趣干货!
👩‍💻 提供:模拟面试 | 简历诊断 | 独家简历模板
🌈 感谢关注,关注了你就是我的超级粉丝啦!
🔒 以下内容仅对你可见~

作者:后端小知识CSDN后端领域新星创作者 |阿里云专家博主

CSDN个人主页:后端小知识

🔎GZH后端小知识

🎉欢迎关注🔎点赞👍收藏⭐️留言📝

image-20231222230153568

亲爱的友友们,我们今天来学习一个简单而又常用的算法(比赛中遇到了就赚大发了额😎)

这个算法的名字就叫做 差分算法

差分算法在各种算法比赛中使用到的频率还是不低的,大家一定要掌握哟,主要是这个算法也比较简单,容易理解

我们本次讲解只讲解一维差分,二维差分我们后续再讲,只要你把一维差分理解到位了,二维差分也是直接拿下🌈

概念

我们先来了解一下一些概念性的东西

在算法和计算机科学中,差分(Differential)通常指的是一种数据结构,它用于高效地存储和查询序列中元素的增量。这种数据结构特别适用于那些元素之间存在固定增量的序列

差分数组

差分数组是一种优化的数据结构,它通过存储序列的增量来减少计算时间。给定一个序列 A,其差分数组 D 可以通过以下方式构建:

  1. 初始化一个空数组 D
  2. 对于序列 A 中的每个元素 A[i](从 i = 1n,其中 n 是序列的长度),计算 D[i] = A[i] - A[i-1](如果 i 是序列的第一个元素,则 D[i] = A[i])。
  3. 最终,差分数组 D 的第一个元素 D[0] 通常被设置为 0(或者序列的第一个元素,取决于具体应用)。

是不是感觉特别简单啊,那我们来实践一下,加深理解😍

例子

我们来看一道Acwing上面的模板题:

🔗我也直接给家人们要来了(贴心吧❤️):差分

image-20231222222602766

这个题目的意思是不是特别简单啊,我们最直观的做法就是写个双重循环直接干,但是看这数据范围肯定会TLE的💣

我们必须得优化,怎么优化呢,就要用到我们上面说的差分了,

思路

我们定义一个差分数组b,b[i] = a[i]-a[i-1] (i>=1),

📢:b[0]=a[0]

我们简单列举几项

b[1]=a[1]-a[0]

b[2]=a[2]-a[1]

b[3]=a[3]-a[2]

b[i]=a[i]-a[i-1]

好啦🌶,我们要求a[i]的话,是不是就是求b[i]+b[i-1]+…b[0]啊

所以a[i]=b[i]+b[i-1]+…b[0]

这些理清楚后,我们来看下怎么做增加操作

我们要在a数组的 l 到 r 区间 给每个数加上c , 如果我们直接去操作a数组,需要操作r-l次

注意啦,我们不去操作a数组,我们去动b数组

我们将 b[l] + c ,这样就相当于a[l] 后面的所有数都加上了c

然后 b[r+1]-c,这里为什么 要 减去c呢? 就是因为刚刚把l后面的都加上了c,而从r+1开始,我们又不要+c,所以得减去c

👩🏻‍💻答疑环节

有的小伙伴可能有疑问了为什么b[l]+c 就相当于a[l] 后面的所有数都加上了c

我们假设一下,我们求 a[l+3]的值

根据公式来

a[l+3]=b[l+3]+b[l+2]+b[l+1]+b[l]+b[l-1]+…b[0]

因为我们刚刚对b[l]加了c,所以a[l+3] 肯定是比之前的值大c的

怎么样,理解了吗?如果还有不理解的地方可以再评论区留言或者厚台滴滴我哟🤓

OK,理论都整清楚了,我们接下来写写code吧

代码

AC 代码清单

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

看了代码后是否加深了理解了呢,如果大家还有任何疑问的话欢迎大家来和我交流哟😎

【都看到这了,点点赞点点关注呗,爱你们】😚😚

抽象工厂  引导关注

💬

✨ 正在努力的小新~
💖 超级爱分享,分享各种有趣干货!
👩‍💻 提供:模拟面试 | 简历诊断 | 独家简历模板
🌈 感谢关注,关注了你就是我的超级粉丝啦!
🔒 以下内容仅对你可见~

作者:后端小知识CSDN后端领域新星创作者 | 阿里云专家博主

CSDN个人主页:后端小知识

🔎GZH后端小知识

🎉欢迎关注🔎点赞👍收藏⭐️留言📝

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

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

相关文章

Python-docx 深入word源码 带有序号的段落无法设置段后、段前距离、间距等段落属性

如果使用p doc.add_paragraph(内容, styleList Number)来创建序号段落&#xff0c;会发现设置序号段落之间的段前、段后以及段落间距无法生效。后来将docx库生成的word文档打开后发现段落的设置出现问题&#xff0c;如下图红框所示&#xff0c;将该选项去掉即可使段落间距属性…

【AIGC-图片生成视频系列-4】DreamTuner:单张图像足以进行主题驱动生成

目录 一. 项目概述 问题&#xff1a; 解决&#xff1a; 二. 方法详解 a) 整体结构 b) 自主题注意力 三. 文本控制的动漫角色驱动图像生成的结果 四. 文本控制的自然图像驱动图像生成的结果 五. 姿势控制角色驱动图像生成的结果 2023年的最后一天&#xff0c;发个文记录…

迈向通用异常检测和理解:大规模视觉语言模型(GPT-4V)率先推出

PAPERCODEhttps://arxiv.org/pdf/2311.02782.pdfhttps://github.com/caoyunkang/GPT4V-for-Generic-Anomaly-Detection 图1 GPT-4V在多模态多任务异常检测中的综合评估 在这项研究中&#xff0c;我们在多模态异常检测的背景下对GPT-4V进行了全面评估。我们考虑了四种模式&#…

BikeDNA(二) OSM数据的内在分析1

BikeDNA&#xff08;二&#xff09; OSM数据的内在分析1 该笔记本分析给定区域的 OSM 自行车基础设施数据的质量。 质量评估是“内在的”&#xff0c;即仅基于一个输入数据集&#xff0c;而不使用外部信息。 对于将 OSM 数据与用户提供的参考数据集进行比较的外在质量评估&…

mysql原理--optimizer trace表的神器功效

1.概述 设计 MySQL 的大叔提出了一个 optimizer trace 的功能&#xff0c;这个功能可以让我们方便的查看优化器生成执行计划的整个过程&#xff0c;这个功能的开启与关闭由系统变量 optimizer_trace 决定。 如果想打开这个功能&#xff0c;必须首先把 enabled 的值改为 on &am…

力扣回溯算法-电话号码的字母组合

力扣第17题&#xff0c;电话号码的字母组合 题目 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。 .电话号码的字母组合 示例: 输入&#xff1a;“2…

lv14 注册字符设备 3

1 注册字符设备 1.1 结构体介绍 struct cdev {struct kobject kobj;//表示该类型实体是一种内核对象struct module *owner;//填THIS_MODULE&#xff0c;表示该字符设备从属于哪个内核模块const struct file_operations *ops;//指向空间存放着针对该设备的各种操作函数地址str…

2023-12-17 LeetCode每日一题(使用最小花费爬楼梯)

2023-12-17每日一题 一、题目编号 746. 使用最小花费爬楼梯二、题目链接 点击跳转到题目位置 三、题目描述 给你一个整数数组 cost &#xff0c;其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用&#xff0c;即可选择向上爬一个或者两个台阶。 你…

宠物猫的饲养技术,可爱猫的秘密世界

一、教程描述 从来没有养过猫的朋友&#xff0c;在你猫咪来你家之前&#xff0c;最基本的准备工作需要做好&#xff0c;比如清洁消毒屋子&#xff0c;为猫咪准备好猫砂、猫砂盆、猫粮&#xff08;不要去超市买猫粮&#xff09;&#xff0c;以及一个柔软的窝。满三个月的小猫要…

Linux 安装 mysql 【使用 tar.gz | tar.xz安装包-离线安装】

一、以tar.xz压缩包为安装源 网址&#xff1a;https://downloads.mysql.com/archives/community/ 二、解压压缩包 首先&#xff0c;将压缩包从windows传输到linux上 解压到/usr/local下&#xff0c;并且将解压的目录名称改为mysql tar -xvf /tmp/mysql-8.1.0-linux-glibc2.2…

【JVM】一文掌握JVM垃圾回收机制

作为Java程序员,除了业务逻辑以外,随着更深入的了解,都无法避免的会接触到JVM以及垃圾回收相关知识。JVM调优是一个听起来很可怕,实际上很简单的事。 感到可怕,是因为垃圾回收相关机制都在JVM的C++层实现,我们在Java开发中看不见摸不着;而实际很简单,是因为它说到底,也…

[密码学]ECC加密

椭圆曲线加密 Ellipse Curve Cryptography 椭圆曲线上的离散对数问题 Ellipse Curve Discrete logarithm Problem 椭圆曲线 注意积分公式的分母&#xff0c;椭圆曲线由此得名。这种曲线和椭圆一点不像。 离散对数&#xff1a; yg^x mod p,对于给定的g,x,p求y很容易&#…

操作系统期末复习

分段存储管理方式 某采用段式存储管理的系统为装入主存的一个作业建立了如下段表&#xff1a; 段号 段长 主存起始地址 0 660 210 1 140 3300 2 100 90 3 580 1237 4 960 1959 &#xff08;1&#xff09;计算该作业访问[0&#xff0c;432]&#xff0c;[1&am…

什么是缓存、为什么要用缓存、缓存分类、缓存测试、缓存更新、缓存设计考虑点、缓存测试点

一、缓存 缓存是一种将数据存储在高速缓存中的技术&#xff0c;它可以提高应用程序的性能和响应速度。 二、 为什么要用缓存 1. 高性能(主要目的) 查询耗时&#xff0c;但变化少&#xff0c;又有很多读请求情况下&#xff0c;可以将查询结果放到缓存中。减少对数据库的压力&…

Python实现【亚马逊商品】数据采集

前言 亚马逊公司&#xff0c;是美国最大的一家网络电子商务公司&#xff0c;位于华盛顿州的西雅图 是网络上最早开始经营电子商务的公司之一&#xff0c;亚马逊成立于1994年 今天教大家用Python批量采集亚马逊平台商品数据&#xff08;完整代码放在文末&#xff09; 地址&#…

应对服务器CPU占用持续性变高的解决办法

​  在服务器的使用过程中&#xff0c;高CPU使用率是一个常见的问题&#xff0c;一般是由于遇到大量流量&#xff0c;进程需要更多时间来执行或通过网络发送和接收大量网络数据包时&#xff0c;CPU使用率可能会急剧增加&#xff0c;严重时可能会影响到网络的性能和稳定性。因…

保护Word或Excel的几种方法,总有一种满足你的需求

你已经在Microsoft Word或Excel中创建了一个重要或机密文件,你希望将其保密或至少保持安全。也许你想确保只有你和某些人可以阅读或编辑它。也许你想限制某人可以对文件进行的修改类型。你甚至可以向读者保证这是最终版本。如果你知道在Word和Excel中使用哪些工具以及它们是如…

Git:常用命令(二)

查看提交历史 1 git log 撤消操作 任何时候&#xff0c;你都有可能需要撤消刚才所做的某些操作。接下来&#xff0c;我们会介绍一些基本的撤消操作相关的命令。请注意&#xff0c;有些操作并不总是可以撤消的&#xff0c;所以请务必谨慎小心&#xff0c;一旦失误&#xff0c…

提前应对威胁

通过新的《2023-2028 年荷兰国际网络安全战略》&#xff0c;荷兰政府在面对国家和犯罪分子持续构成的网络威胁时展现了责任和机构。它渴望将民主、人权和规范放在首位&#xff0c;并寻求维护全球开放、自由和安全的互联网。该战略明确了政府在国内实施打击的意愿和能力&#xf…

QT、C++实验室管理系统

一、需求介绍&#xff1a; 题目:基于Qt的实验室管理系统的设计 项目命名以LabSystem姓名拼音首字母&#xff08;例如: LabSystemwXC) 功能要求: 一&#xff0c;基本必要功能: 1&#xff0c;使用QSQLITE数据库完成数据库的设计。 2&#xff0c;注册功能:包含学生注册&#xff0…