• 一维差分模板——差分数列


    一维差分模板——差分数列

    一维差分:

    设有一个序列a1,a2,a3,,a4

    我们定义一个新的序列:

    b数组就是a数组的差分数组

    差分的前缀和是原序列

    差分应用一:

    当我们要在某个区间[l,r]的所有值都加上一个数x时:

     

    差分

    一个长度为 n 的整数序列。 
    将序列中 [l, r] 之间的每个数加上 c。 
    请你输出进行完所有操作后的序列。 

    核心代码:

    //构造差分数组
    void insert(int l,int r,int c){
        diff[l]+=c;
        diff[r+1]-=c;
    }
    //对差分做前缀和得真正差分数组
    for (int i = 1; i <= n; i++){
        diff[i]+=diff[i-1];
    }
    //结果数组
    for (int i = 1; i <= n; i++){
        cout<<diff[i]+arr[i]<<" ";
    }  

    AcWing797. 差分

    输入一个长度为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

    代码:

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

     

     

     

     

     

     

    因上求缘,果上努力~~~~ 作者:每天卷学习,转载请注明原文链接:https://www.cnblogs.com/BlairGrowing/p/14064091.html

  • 相关阅读:
    简析Java RMI 与 .NET Remoting
    实现一个压缩Remoting传输数据的Sink:CompressionSink (转载)
    智能部署与更新
    第二章:.NET Remoting基础知识
    创建以Microsoft .NET Remoting为基础的分布式应用架构
    vs2005如何防止代码被反编译
    使用.NET Remoting开发分布式应用——配置文件篇(转载)
    Remoting概述
    高级 .NET Remoting
    第一章:Remoting技术简介
  • 原文地址:https://www.cnblogs.com/BlairGrowing/p/14064091.html
Copyright © 2020-2023  润新知