AcWing 797. 差分(模板)

在这里插入图片描述

我根据之前所学的写了一次差分。
代码如下

#include<iostream>
using namespace std;
const int N=1e5+10;
int a[N],k[N];
int main(void)
{
    
    
    int n,m;
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
    
    
        cin>>a[i];
        k[i]=a[i]-a[i-1];
    }
    for(int i=1;i<=m;i++)
    {
    
    
        int l,r,c;
        cin>>l>>r>>c;
        k[l]+=c;
        k[r+1]-=c;
    }
    long long sum=0;
    for(int i=1;i<=n;i++)
    {
    
     
        sum+=k[i];
        cout<<sum<<" ";
    }
 
}

看完老师的视频后,写出了更优的写法(模板)

#include<iostream>
using namespace std;
const int N=1e5+10;
int a[N],b[N];

void insert(int l,int r,int c)
{
    
    
    b[l]+=c;
    b[r+1]-=c;
    return ;
}
int main(void)
{
    
    
    int n,m;
    cin>>n>>m;
    
    for(int i=1;i<=n;i++) cin>>a[i];
    
    for(int i=1;i<=n;i++) insert(i,i,a[i]);
    
    for(int i=1;i<=m;i++)
    {
    
    
        int l,r,c;
        cin>>l>>r>>c;
        insert(l,r,c);
    }
    long long sum=0;
    for(int i=1;i<=n;i++)
    {
    
    
        sum+=b[i];
        cout<<sum<<" ";
    }
}

猜你喜欢

转载自blog.csdn.net/qq_52358098/article/details/113711375