C++差分数组(二维)

关于差分数组

如你所见,差分数组就是表示原数组中相邻数差值的数组,通常只需要给出第一个元素就可以依靠差分数组推出整个原数组。

而且差分数组在变动数组一定范围内的元素时可以减少大量时间,可以很好的避免超时问题(这里描述的有点抽象,能理解就理解吧,尽力了😂)

关于二维差分数组

能理解一维的,二维应该也差不多,就是把一维的扩展到了二维而已,和一维一样,如果想要改变一整个区间(到了二维就应该是矩阵)的所有变量,只需要改变头尾(四个角)的值就可以了

这里是一些简单操作,且看且珍惜

题目

法术叠加

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int n,m;
int a[10010][10010]={0};
int b[10010][10010]={0};
int main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			cin>>a[i][j];
			b[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;
		int k;
		cin>>x1>>y1>>x2>>y2>>k;
		b[x1][y1]+=k;
		b[x2+1][y2+1]+=k;
		b[x1][y2+1]-=k;
		b[x2+1][y1]-=k;
		//>_<
	}
	int ma=-1;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			a[i][j]=b[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;
				int sy=j;
				int ex=i;
				int ey=j;
				while(a[sx][ey]==ma&&ey<=m)ey++;
				while(a[ex][sy]==ma&&ex<=n)ex++;
				int maex=ex;
				int 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;
}
相关推荐
踢足球09292 分钟前
寒假打卡:2026-2-7
java·开发语言·javascript
一只小小的芙厨5 分钟前
AT_tkppc3_d 巨大チェスボード 题解
c++·题解
我在人间贩卖青春8 分钟前
C++之继承与派生类的关系
c++·向上造型·向下造型
Trouvaille ~8 分钟前
【Linux】应用层协议设计实战(二):Jsoncpp序列化与完整实现
linux·运维·服务器·网络·c++·json·应用层
_OP_CHEN14 分钟前
【算法基础篇】(五十七)线性代数之矩阵乘法从入门到实战:手撕模板 + 真题详解
线性代数·算法·矩阵·蓝桥杯·c/c++·矩阵乘法·acm/icpc
天天爱吃肉821819 分钟前
【跨界封神|周杰伦×王传福(陶晶莹主持):音乐创作与新能源NVH测试,底层逻辑竟完全同源!(新人必看入行指南)】
python·嵌入式硬件·算法·汽车
im_AMBER20 分钟前
Leetcode 114 链表中的下一个更大节点 | 删除排序链表中的重复元素 II
算法·leetcode
EmbedLinX21 分钟前
嵌入式之协议解析
linux·网络·c++·笔记·学习
薛定谔的猫喵喵27 分钟前
基于PyQt5的视频答题竞赛系统设计与实现
开发语言·qt·音视频
岱宗夫up32 分钟前
Python 数据分析入门
开发语言·python·数据分析