差分数组(二维)(c++)

干货

二位差分数组的定义与概念

二位差分数组的构建与核心操作

根据二位差分数组来还原原数组

题目练习

法术叠加

cpp 复制代码
#include <bits/stdc++.h>
#define ll long long
using namespace std;
int n,m;
int a[1010][1010],d[1010][1010];

int main()
{
	
	cin>>n>>m;
	for(int i = 1;i<=n;i++)
	{
		for(int j = 1;j<=m;j++)
		{
			cin>>a[i][j];
			d[i][j] = a[i][j]+a[i-1][j-1]-a[i-1][j]-a[i][j-1];
		}
	}
	int t;
	cin>>t;
	while(t--)
	{
		int x1,y1,x2,y2,k;
		cin>>x1>>y1>>x2>>y2>>k;
		d[x1][y1] += k;
		d[x2+1][y2+1] += k;
		d[x1][y2+1] -= k;
		d[x2+1][y1] -= k;
	}
	int ma = -999999999;
	for(int i = 1;i<=n;i++)
	{
		for(int j = 1;j<=m;j++)
		{
			a[i][j] = d[i][j]-a[i-1][j-1]+a[i][j-1]+a[i-1][j];
			ma = max(ma,a[i][j]);
		}
	}
	cout<<ma<<endl;
	for(int i = 1;i<=n;i++)
	{
		for(int j = 1;j<=m;j++)
		{
			if(a[i][j]==ma)
			{
				int sx = i,sy = j;
				int ex = i,ey = j;
				while(a[sx][ey]==ma&&ey<=m) ey++;
				while(a[ex][sy]==ma&&ex<=n) ex++;
				int maex = ex,maey = ey;
				bool ff = false;
				for(ex = maex;ex>=sx;ex--)
				{
					for(int ey = maey;ey>=sy;ey--)
					{
						bool f = true;
						for(int k = sx;k<=ex;k++)
						{
							for(int l = sy;l<=ey;l++)
							{
								if(a[k][l]!=ma)
								{
									f = false;
									break;
								}
							}
							if(f==false) break;
						}
						if(f==true)
						{
							ff = true;
							cout<<sx<<" "<<sy<<" "<<ex<<" "<<ey<<endl;
						}
					}
					if(ff==true) break;
				}
			}
		}
	}
	
	return 0;
}

总结

好了,今天的内容就到这里了。喜欢的话,点个关注呗~

相关推荐
折哥的程序人生 · 物流技术专研5 小时前
Java面试85题图解版 · 特别篇:2026后端高频面试题复盘(算法底层逻辑+高并发架构设计全解析,附Java实战代码)
java·网络·数据库·算法·面试
玖玥拾6 小时前
C/C++ 基础笔记(十四)多态与模板编程
c语言·c++·多态·模板
想吃火锅10056 小时前
【leetcode】14.最长公共前缀js
算法·leetcode·职场和发展
Roann_seo%7 小时前
C++文件操作完全指南:从文本读写到二进制文件处理
开发语言·c++
坚果派·白晓明7 小时前
【鸿蒙PC】SDL3 适配:AtomCode + Skills 快速集成 NAPI 测试工具
c++·华为·ai编程·harmonyos·atomcode
云絮.8 小时前
数据库操作
数据库·mysql·算法·oracle
小林ixn8 小时前
LeetCode 206. 反转链表(迭代 + 递归详解)
算法·leetcode·链表
凡人叶枫8 小时前
Effective C++ 条款17:以独立语句将 newed 对象置入智能指针
java·linux·开发语言·c++·算法
凡人叶枫9 小时前
Effective C++ 条款16:成对使用 new 和 delete 时要采取相同形式
开发语言·c++·effective c++
菜鸟‍9 小时前
LeetCode 1 27 和 704 || 两数之和 移除元素 二分查找
算法·leetcode·职场和发展