当前位置: 首页 > news >正文

【基础算法】差分

🌹作者:云小逸
📝个人主页:云小逸的主页
📝Github:云小逸的Github
🤟motto:要敢于一个人默默的面对自己,强大自己才是核心。不要等到什么都没有了,才下定决心去做。种一颗树,最好的时间是十年前,其次就是现在!学会自己和解,与过去和解,努力爱自己。==希望春天来之前,我们一起面朝大海,春暖花开!==🤟
👏专栏:C++👏 👏专栏:Java语言👏
👏专栏:C语言初阶👏👏专栏:数据结构👏

文章目录

  • 前言
  • 差分
    • 基本思想:
    • 例题【一维差分】
      • 题目:
      • 输入格式
      • 输出格式
      • 数据范围
      • 输入样例:
      • 输出样例:
      • 做题思路:
        • 核心思想:
      • 代码:
  • 最后


前言

今天开始进行下一个知识点的学习:差分,如有表达错误,请见谅,希望可以私信告知,望见谅。
——————————————————————————————————————————

首先先写上几句话:献给坚持创作的我和点开这篇文章希望进步的你
1.“我仍觉那无数个奋笔疾书的日夜、无数个崩溃又自我治愈的瞬间、无数个含泪坚持的时刻,都会在不经息间汇成生命的宽度。”

2.“人生这条路很长, 未来如星辰大海般璀璨,不必踌躇于过去的半亩方塘。那些曾受过的伤,终会化作照亮前路的光。”

3.“你正在经历的这一切,你的焦虑、挣扎、你努力去做的调整、改变,你情绪掉下去的那段时间,全都是你生活的累积。在生活达到你想要的样子之前,你得允许它有一个积累的过程。”

4.“在需要尽全力的时候偷懒,看到别人努力又很没有安全感,最后带着这种焦虑继续假模假样地放松自己,不要成为这样的人,很丢脸。” ​​​

5.“梦想不是空谈,而是一步一个脚印地慢慢积累。当你的能力还撑不起你的梦想时,那就沉下心来历练。

差分

基本思想:

其实差分与我们上一篇文章【前缀和】是相反的。
即a[n]是b[n]数组的前缀和,那么可以说b[n]是a[n]的差分。

例题【一维差分】

题目:

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

输入格式

第一行包含两个整数 n 和 m。
第二行包含 n 个整数,表示整数序列。
接下来 m 行,每行包含三个整数 l,r,c,表示一个操作。

输出格式

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

数据范围

1≤n,m≤100000 ,
1≤l≤r≤n,
−1000≤c≤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中【这里也用到了insert函数],然后使用insert函数将每个数据的差分存储在数组b中,最后遍历数组b,将每个数据的差分累加起来,得到最终的结果。

核心思想:

这里的核心思想是要针对[l,r]这一段要加上c
这里我们从l开始+c,但是r后面是不需要加上c,故b[r+1]-=c与之前的多加的相抵消。

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

代码:

#include<iostream>
using namespace std;const int N=100010;
int n,m;
int a[N],b[N];void insert(int l,int r,int c)
{b[l]+=c;b[r+1]-=c;
}int main()
{cin>>n>>m;for(int i=1;i<=n;i++){cin>>a[i];insert(i,i,a[i]);}while(m--){int l,r,c;cin>>l>>r>>c;insert(l,r,c);}for(int i=1;i<=n;i++){b[i]+=b[i-1];cout<<b[i]<<" ";}return 0;
}

在这里插入图片描述

最后

十分感谢你可以耐着性子把它读完和我可以坚持写到这里,送几句话,对你,也对我:

1.“在我们看不到的地方,父母一直都在对这个世界低声下气 。我们踩着父母的肩膀,见识了这个世界的繁华。”

2.趁自己还不老,走自己想走的路。没有理由,不去闯!时间,抓起了就是黄金,虚度了就是流水;理想,努力了才叫理想,放弃了那只是妄想!努力,虽然不一定会获得,但不努力,就一定一无所获。

3.趁自己还不老,走自己想走的路。没有理由,不去闯!时间,抓起了就是黄金,虚度了就是流水;理想,努力了才叫理想,放弃了那只是妄想!努力,虽然不一定会获得,但不努力,就一定一无所获。

4.我一直以为人是慢慢变老的,其实不是,人是一瞬间变老的。

5.随着年龄的增长,我们愈加发现,或许我们并不是失去了一些人,而是更加懂得到底谁才是最重要的人。

最后如果觉得我写的还不错,请不要忘记点赞✌,收藏✌,加关注✌哦(。・ω・。)

愿我们一起加油,奔向更美好的未来,愿我们从懵懵懂懂的一枚菜鸟逐渐成为大佬。加油,为自己点赞!

http://www.lryc.cn/news/13595.html

相关文章:

  • 【LeetCode】剑指 Offer(5)
  • 外包出来,朋友内推我去一家公司,问的实在是太...
  • 刷题记录:牛客NC54585小魂和他的数列 [线段树卡常,真恶心]
  • 2019蓝桥杯真题旋转 C语言/C++
  • <JVM上篇:内存与垃圾回收篇>11 - 垃圾回收相关算法
  • 狂飙Linux平台,软件部署大全
  • 积分球原理及积分球类型介绍
  • Vision Transformer(ViT) 2: 应用及代码讲解
  • 高频面试题|JVM虚拟机的体系结构是什么样的?
  • MyBatis-Plus详细讲解(整合spring Boot)
  • 骨传导耳机是不是智商税?骨传导耳机真的不伤耳吗?
  • 模拟实现string
  • 自监督表征预训练之掩码图像建模
  • 华为OD机试题 - 磁盘容量(JavaScript)| 代码+思路+重要知识点
  • ChatGPT:“抢走你工作的不会是 AI ,而是先掌握 AI 能力的人”
  • 数据结构与算法(Java版) | 线性结构和非线性结构
  • 电商数据查询平台:母婴行业妈妈用品全网热销,头部品牌格局初现
  • STM32模拟SPI协议获取24位模数转换(24bit ADC)芯片AD7791电压采样数据
  • 华为OD机试题 - 交换字符(JavaScript)| 代码+思路+重要知识点
  • 最好的工程师像投资者一样思考,而不是建设者
  • Mysql里的ibtmp1文件太大,导致磁盘空间被占满
  • android kotlin 协程(四) 协程间的通信
  • 苹果手机通讯录突然没了怎么恢复?
  • BI知识全解,值得收藏
  • 【机器学习】GBDT
  • C#开发的OpenRA游戏高性能内存访问的方法
  • 【elasticsearch】elasticsearch es读写原理
  • 数据在内存中的存储【上篇】
  • 慕了没?3年经验,3轮技术面+1轮HR面,拿下字节30k*16薪offer
  • 「可信计算」与软件行为学