【基础算法】差分

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

@TOC


前言

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

首先先写上几句话:献给坚持创作的我和点开这篇文章希望进步的你
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.随着年龄的增长,我们愈加发现,或许我们并不是失去了一些人,而是更加懂得到底谁才是最重要的人。

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

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

目录
相关文章
|
1月前
|
算法 C++
c++算法学习笔记 (5)前缀和+差分
c++算法学习笔记 (5)前缀和+差分
|
1月前
|
人工智能 算法 BI
【算法基础】基础算法(二)--(高精度、前缀和、差分)(下)
【算法基础】基础算法(二)--(高精度、前缀和、差分)(下)
|
1月前
|
存储 算法 索引
【算法基础】基础算法(二)--(高精度、前缀和、差分)(上)
【算法基础】基础算法(二)--(高精度、前缀和、差分)(上)
|
1月前
|
人工智能 算法
基础算法--前缀和与差分
基础算法--前缀和与差分
|
1月前
|
人工智能 移动开发 算法
算法基础:前缀和与差分
算法基础:前缀和与差分
56 1
算法基础:前缀和与差分
|
1月前
|
算法 测试技术 C#
【滑动窗口】【差分数组】C++算法:K 连续位的最小翻转次数
【滑动窗口】【差分数组】C++算法:K 连续位的最小翻转次数
|
11月前
|
机器学习/深度学习 算法 调度
基于差分进化算法的微电网调度研究(Matlab代码实现)
基于差分进化算法的微电网调度研究(Matlab代码实现)
|
7月前
|
算法
算法学习--前缀和与差分
算法学习--前缀和与差分
|
9月前
|
人工智能 算法 JavaScript
[数据结构与算法]基础算法(排序, 二分, 前缀, 差分)
快速排序:(分治的思想)✅ 确定分界点:q[l], q[(r+l)/2], q[r] (中间点可以随机选, 按照同一规则, 这里选(l+r)/2该点) 维护数组:维护分界点的左边都比分界点小,分界点的右边都比分界点大 按照维护关系, 递归处理左右两段 💡思想解释: 先整后细:先让大体总的符合条件,再部分部分解决
|
10月前
|
移动开发 人工智能 算法
【算法基础】差分算法及其应用
【算法基础】差分算法及其应用
128 0