差分数组(简单易懂)

差分数组(简单易懂)一、什么是差分数组?差分数组本质上来说就是一个数组,可以用O(1)的时间处理区间修改。二、差分数组的定义式设原数组为a数组,差分数组为d数组,则对于i∈[2,n],都有d[i]=a[i]-a[i-1].三、差分数组的性质1.当我们需要更新区间[l,r]时候(仅指加减运算),我们仅仅可以只更新d[l]+=x,d[r+1]-=x;2.当我们需要单独查询原数组一个点的值的时候,我们不难发现出令Sn为di的前缀和,那么a[i]=Si;3.当我们需要求原数组的前缀和的时候,我们可以设前x项

大家好,又见面了,我是你们的朋友全栈君。

一、什么是差分数组?

差分数组本质上来说就是一个数组,可以用O(1)的时间处理区间修改。

二、差分数组的定义式

设原数组为a数组,差分数组为d数组,则对于i∈[2,n],都有d[i]=a[i]-a[i-1].

三、差分数组的性质

1.当我们需要更新区间[l,r]时候(仅指加减运算),我们仅仅可以只更新d[l]+=x,d[r+1]-=x;

2.当我们需要单独查询原数组一个点的值的时候,我们不难发现出令S_{n}为d[i]的前缀和,那么a[i]=S_{i};

3.当我们需要求原数组的前缀和的时候,我们可以设前x项和为sum_{x},则有:sum_{_{x}}=\sum_{i=1}^{x}a[i]=\sum_{i=1}^{x} \sum_{j=1}^{i}d[i]=\sum_{i=1}^{x}(x-i+1)d[i]

四、例题:

AcWing 1952. 金发姑娘和 N 头牛

AC代码:

#include <iostream>
#include <cstring>
#include <algorithm>
#include <map>
using namespace std;
map<int,int>mapp;
int main(){
    int n,x,y,z;
    cin >> n >> x >> y >> z;
    int xx,yy;
    for (int i = 1; i <= n; i ++ )
    {
        cin >> xx >> yy;
        mapp[0]+=x;
        mapp[xx]=mapp[xx]-x+y;
        mapp[yy+1]=mapp[yy+1]-y+z;
    }
    int maxn=0;
    int sum=0;
    for(map<int,int>::iterator iter=mapp.begin();iter!=mapp.end();iter++){
        sum+=iter->second;        
        maxn=max(maxn,sum);
    }
    cout<<maxn;
    return 0;
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/143800.html原文链接:https://javaforall.net

(0)
上一篇 2022年5月20日 下午8:00
下一篇 2022年5月20日 下午8:00


相关推荐

  • Sqoop问题解决:运行报错java.lang.RuntimeException: Could not load db driver class: com.mysql.jdbc.Driver

    Sqoop问题解决:运行报错java.lang.RuntimeException: Could not load db driver class: com.mysql.jdbc.DriverSqoop问题解决:运行报错报错信息:java.lang.RuntimeException:Couldnotloaddbdriverclass:com.mysql.jdbc.Driver原因分析:未将mysql关系型数据库驱动包放到sqoop/lib目录下解决方法:将mysql关系型数据库驱动包放到sqoop/lib目录下这里需要下载mysql关系型数据库驱动包放到本地/opt/software/下mysql依赖包下载链接:https://pan.baidu.com/s

    2022年7月25日
    17
  • C语言if语句的基本用法

    C语言if语句的基本用法C语言if语句的基本用法一、if…1.一般形式:if(表达式){语句;}表达式:a,用非0值表示真,用0表示真;b,if(flag)相当于if(1==flag)c,浮点数无法与0比较,只能用近似的值比较;例:(1e-6)相当于1×10的-6次方;2.用于单分支选择结构;3.如含有交叉关系,使用并列的if语句;例:输出两个整数中的最大值#inclu…

    2022年5月19日
    45
  • TensorFlow 多层感知器

    TensorFlow 多层感知器本文介绍如何使用 TensorFlow 对多层感知器进行编程

    2026年3月26日
    1
  • shell脚本export变量只限脚本内么_shell脚本调用oracle存储过程

    shell脚本export变量只限脚本内么_shell脚本调用oracle存储过程shell脚本中export命令未生效,原因详解问题:我有一个脚本,脚本中有如下一条语句exportfdu=“dufan”用sh运行脚本后,在当前shell利用命令env查看环境变量,但是却没有fdu变量,难道是因为我的export语句没有生效?解决结果:脚本中的export一定是生效的利用source执行脚本,在当前shell即可查看到fdu环境变量。这个问题涉及了三个知识点:变量(环境变量、自定义变量)父进程与子进程脚本的执行方式什么是变量?变量的分类?1.

    2025年9月24日
    4
  • OpenClaw保姆级教程:手把手教你搭建AI数字员工

    OpenClaw保姆级教程:手把手教你搭建AI数字员工

    2026年3月13日
    1
  • 第三方qq登录接口

    第三方qq登录接口第三方登录 1 首先就是去互联登录申请了 为什么要申请呢 是应为他会给你分配一个 appid 和一个 appkey 给 不然你是没有资格去第三方登录的 申请大概一个星期左右唯一需要注意的是第二个回调地址了这个是可以随时修改的 2 获取到了 appid 和 appkey 然后我们就需要开发后台了我们先去获取 javasdk 记得是 javasdk 不是 jssdk

    2026年3月18日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号