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