差分数组(简单易懂)

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


相关推荐

  • 行列式及其运算和性质[通俗易懂]

    行列式及其运算和性质[通俗易懂]行列式特别注意,行列式虽然表达为一系列数字的数表,但是其本质式一个数,这个跟矩阵有本质的区别.二阶行列式D=∣a11a12a21a22∣=a11a22−a12a21D=\begin{vmatrix}a_{11}&a_{12}\\a_{21}&a_{22}\end{vmatrix}=a_{11}a_{22}-a_{12}a_{21}D=∣∣∣∣​a11​a21​​a12​a22​​∣∣∣∣​=a11​a22​−a12​a21​三阶行列式D=∣a11a12a13a21a2

    2022年11月1日
  • 在做微信分享到朋友圈时,手机扫码报config:invalid signature,分享后后正常的问题,是url问题…

    在做微信分享到朋友圈时,手机扫码报config:invalid signature,分享后后正常的问题,是url问题…

    2021年10月16日
  • pytest skipif_pytest失败重跑

    pytest skipif_pytest失败重跑前言pytest.mark.skip可以标记无法在某些平台上运行的测试功能,或者您希望失败的测试功能Skip和xfail:处理那些不会成功的测试用例你可以对那些在某些特定平台上不能运行的测试用

    2022年7月30日
  • excel文件不能上传怎么解决_上传视频的方法

    excel文件不能上传怎么解决_上传视频的方法EXCEL上传不了解决 安装AccessDatabaseEngine.exe 配置管理 把这2项属性里的内置账号改成localsystem   点击右键 找到方面点击进去找到外围服务器把下面的 改成turn    语句: declare@excfilevarchar(100),@

    2022年10月3日
  • Vue组件封装的过程[通俗易懂]

    Vue组件封装的过程[通俗易懂]Vue组件封装的过程vue组件的定义组件(Component)是Vue.js最强大的功能之一 组件可以扩展HTML元素,封装可重用代码在较高层面上,组件是自定义元素,Vue.js的编译器为他添加特殊功能某些情况下,组件也可以表现用`js`特性进行了扩展的原生的HTML元素 所有的Vue组件同时也都是Vue实例,所以可以接受相同的选项对象(除了一些根级特有的选项),并提供相同的生命周期钩子函数vue组件的功能能够把页面抽象成多个相对独立的模块实现代码重用,提高开发效率和代码

    2022年9月24日
  • 华为服务器升腾芯片,华为公布昇腾910芯片架构细节:7nm+ EUV工艺、32核达芬奇…

    华为服务器升腾芯片,华为公布昇腾910芯片架构细节:7nm+ EUV工艺、32核达芬奇…在今天开幕的行业顶级活动、第31届HotChips大会上,华为也作为主角之一参加,与AMD、Intel、ARM等巨头一道介绍自家在芯片方面的最新成果。华为此次活动的主题是AI芯片所用的“DaVinci(达芬奇)”架构,成品是去年发布的昇腾310(Ascend310)、昇腾910芯片和麒麟810芯片,另外,AI训练芯片已经应用上了HBM2E内存,即HBM2增强版,SK海力士产品的阵脚传输速率高…

    2022年9月4日

发表回复

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

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