差分

差分是前缀和的逆运算

一维数组 \(diff[i]\) 记录了 \(a[i]-a[i-1]\)
对于区间\([l,r]\)同时加\(w\)

\(Diff[1]+=w\)

差分

看一道例题:

差分例题

Code:

#include<iostream>
using namespace std;
const int N = 1e7 + 10;
int q[N], s[N];
void insert( int l , int r , int c ){
	s[l] += c;
	s[ r + 1] -= c;
}
int main(){
	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]<<" ";
}

posted @ 2023-07-23 09:45  To_Carpe_Diem  阅读(43)  评论(0编辑  收藏  举报