差分数组(简单易懂)

差分数组(简单易懂)一、什么是差分数组?差分数组本质上来说就是一个数组,可以用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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • usb转rs485测试软件,usb转rs485「建议收藏」

    usb转rs485测试软件,usb转rs485「建议收藏」usb转rs485电脑版驱动中还含有安装教程,在安装前可以先看看使用说明再安装。将USB转换线插入电脑的USB接口中,系统会提示检测到新设备并出现新硬件添加向导,选择从列表或指定位置安装,手动安装,找到刚才驱动的解压目录,让WINDOWS自动搜索更新驱动即可。usb转rs485软件功能1、支持的操作系统Windows2000/WindowsXP2、完全兼容USBV1.1和USBCDCV1….

    2022年4月27日
    68
  • Oracle触发器用法实例详解

    Oracle触发器用法实例详解oracle

    2022年7月11日
    17
  • MetaMask使用教程

    MetaMask使用教程MetaMask 是一款在谷歌浏览器 Chrome 上使用的插件类型的以太坊钱包 该钱包不需要下载 只需要在谷歌浏览器添加对应的扩展程序即可 非常轻量级 使用起来也非常方便 1 Chrome 的安装既然是一款运行在谷歌浏览器 Chrome 上的插件 当然首先需要先安装 Chrome 了 读者可以进入官网 https www google co

    2025年10月20日
    5
  • 正确安全的下载 devcon

    正确安全的下载 devcon

    2021年6月17日
    97
  • mysql econnreset_MySQL在node.js服务器上的空闲时间后给出“ read ECONNRESET”错误「建议收藏」

    mysql econnreset_MySQL在node.js服务器上的空闲时间后给出“ read ECONNRESET”错误「建议收藏」我正在运行通过node-mysql模块连接到MySQL的Node服务器。连接和查询MySQL最初运行良好,没有任何错误,但是,将Node服务器闲置几个小时后的第一个查询会导致错误。错误是熟悉的readECONNRESET,来自node-mysql模块的内部。堆栈跟踪(请注意,跟踪的三个条目属于我的应用程序的错误报告代码):Erroratexports.Error.utils.createClas…

    2022年6月17日
    35
  • Tarjan_com.pakdata.QuranMajeed

    Tarjan_com.pakdata.QuranMajeedTarjanTarjan是一种求有向图强联通分量的算法,是用dfs实现以及时间戳标记访问最短时间的.Tarjan算法中每个点都需要扩展边,为了存储方便,推荐使用邻接表.Tarjan算法的优势在于其灵活性,基础代码可以直接适用于多数情况.常见于dfs序.

    2025年7月15日
    3

发表回复

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

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