地毯

链接

这题需要用二维差分解决,这里有一个很巧妙的方法

我们需要对n x m的数据进行加减,可以修改n+1 x m+1 的四个角,再进行求和即可修改

具体做法: 假设修改1,1到 6,7的值,都加上c, 我们只需令1,1和7,8的值加上c,而1,8和7,1的值减c

这样我们通过修改4个值从而对n x m的值进行了修改

#include<iostream>
using namespace std;
int diff[1002][1002] = { 0 };
int main() {
	int n, m;
	cin >> n >> m;
	for (int i = 0;i < m;i++) {
		int x1, y1, x2, y2;
		cin >> x1 >> y1 >> x2 >> y2;
		diff[x1][y1] += 1;
		diff[x2 + 1][y2 + 1] += 1;
		diff[x1][y2 + 1] -= 1;
		diff[x2 + 1][y1] -= 1;
	}
	for (int i = 1;i <= n;i++) {
		for (int j = 1;j <= n;j++) {
			diff[i][j] = diff[i][j] + diff[i - 1][j] + diff[i][j - 1] - diff[i - 1][j - 1];
			cout << diff[i][j] << " ";
		}
		cout << endl;
	}
}

时间复杂度:O(n²)

空间复杂度:O(n²)

全部评论

相关推荐

1.&nbsp;多做一劳永逸的事情。很多事情一次学会基本可以大学四年都不再为这类事情发愁。小的比如学会markdown,记笔记就变得方便快捷;大的比如自己经常要发布上线服务,就花几天搭建一个集群。2.&nbsp;时刻具备3-7天掌握一项技能的心理准备。无论是学科竞赛、期末考试,还是准备实习、秋招,很多时候当你需要快速运用某项技能做事的时候,不会有那么多时间给你准备,这时候就需要速成。3.&nbsp;加入/组建一个技术团体,社团/面试群/社群/技术博主的圈子,并且养成水群习惯。只有你参与并融入你正在追求的事业的氛围里,你才能保持动力去做一件事。推荐一个博主【程序员牛肉】的圈子:https://pd.qq.com/s/daelsgft54.&nbsp;尽早明确自己距离目标还差什么。很多人学习的非常努力,但是方向不明确。最简单的例子,很多我帮忙找实习秋招的朋友,简历都过不了,却花大把时间在背八股上。面试的过程是阶段性的,要考虑的先是有面试机会、再是怎么面试。5.&nbsp;思维不要被约束。后端语言java、c++可以,golang也可以;项目苍穹外卖、黑马点评可以,github上的高star项目也可以;数据库用mysql、redis可以,用postgresql也可以;项目里的ai模块用rag、mcp可以,最简单的function&nbsp;call也可以。帮很多人看简历问题的时候,很多东西都是硬写上去的,项目是自己的,不是非要和网上大流一致才是好项目。
想进开水团喝开水:杭电也是双非是吧
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务