AcWing 798. 差分矩阵

Posted MangataTS

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AcWing 798. 差分矩阵相关的知识,希望对你有一定的参考价值。

题目连接

https://www.acwing.com/problem/content/800/

思路

差分矩阵注意的是在构造差分矩阵的时候不是一维的和前一个数相减,而是看作一个小矩阵进行操作

代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define mod 1000000009
#define endl "\\n"
#define PII pair<int,int>
ll ksm(ll a,ll b) 
	ll ans = 1;
	for(;b;b>>=1LL) 
		if(b & 1) ans = ans * a % mod;
		a = a * a % mod;
	
	return ans;


ll lowbit(ll x)return -x & x;

const int N = 1e3+10;
int n,m,q,a[N][N],d[N][N];

void insert(int x1,int y1,int x2,int y2,int c)
	d[x1][y1] += c;
	d[x2 + 1][y1] -= c;
	d[x1][y2 + 1] -= c;
	d[x2 + 1][y2 + 1] += c;


int main()

	cin>>n>>m>>q;
	for(int i = 1;i <= n; ++i) 
		for(int j = 1;j <= m; ++j) 
			cin>>a[i][j];
		
	
	for(int i = 1;i <= n; ++i) 
		for(int j = 1;j <= m; ++j) 
			insert(i,j,i,j,a[i][j]);
		
	
	int x1,y1,x2,y2,c;
	while(q--) 
		cin>>x1>>y1>>x2>>y2>>c;
		insert(x1,y1,x2,y2,c);
	
	ll res = 0;
	for(int i = 1;i <= n; ++i) 
		for(int j = 1;j <= m; ++j) 
			d[i][j] += d[i-1][j] + d[i][j-1] - d[i-1][j-1];//求前缀和,需要用到之前求出来的状态
			cout<<d[i][j]<<" \\n"[j==m];
		
	
	
	return 0;

以上是关于AcWing 798. 差分矩阵的主要内容,如果未能解决你的问题,请参考以下文章

AcWing 798. 差分矩阵

AcWing 798.差分矩阵

AcWing 798. 差分矩阵

ACwing : 798. 差分矩阵

蓝桥杯AcWing 题目题解 - 二分与前缀和差分

AcWing 796. 子矩阵的和