voidinsert(int l ,int r ,int c ){
s[l]+= c;
s[ r +1]-= c;}
差分其实是前缀和的升级版,举个简单的例子
操作就是利用前缀和,将目标范围内的数进行累加。我们来看一道例题。
#include<iostream>usingnamespace std;constint N =1e7+10;int q[N], s[N];voidinsert(int l ,int r ,int c ){
s[l]+= c;
s[ r +1]-= c;}intmain(){
int n , m ;
cin>> n >> m;for(int i =1; i <= n ; i++){
cin >>q[i];insert( i , i , q[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++) s[i]+= s[i -1];//差分后进行累加for(int i =1; i <= n ; i++) cout<<s[i]<<" ";}