708 二维差分2
// 708 二维差分2.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
/*
http://oj.daimayuan.top/course/22/problem/897
给一个n×m的矩阵a1,1,a1,2,…,a1,m,…,an,m和q个修改操作。
一开始所有位置都是0,每次修改给出五个数x1,y1,x2,y2,d,令所有ai,j(x1≤i≤x2,y1≤j≤y2)加上d。
求出所有操作结束之后,整个矩阵的值。
输入格式
第一行三个整数n,m,q(1≤n,m≤109,q≤2×103)。
接下来q行,每行五个整数x1,y1,x2,y2,d(1≤x1≤x2≤n,1≤y1≤y2≤m,1≤d≤109)。
输出格式
为了防止输出过大,输出操作完之后矩阵中所有数的异或和。
样例输入
5 5 3
1 1 2 3 5
2 2 4 3 6
4 3 5 5 10
样例输出
28
*/
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <vector>
#include <array>
#include <algorithm>
using namespace std;
typedef long long ll;
const int N = 4100;
int n, m, q;
ll a[N][N];
vector<int> numx, numy;
array<int, 5> op[N];
int main()
{
scanf("%d%d%d", &n, &m, &q);
for (int i = 1; i <= q; i++) {
int x1, y1, x2, y2, d;
scanf("%d%d%d%d%d", &x1, &y1, &x2, &y2, &d);
op[i] = { x1,y1,x2,y2,d };
numx.push_back(x1 - 1);
numx.push_back(x2);
numy.push_back(y1 - 1);
numy.push_back(y2);
}
sort(numx.begin(), numx.end());
numx.erase(unique(numx.begin(), numx.end()), numx.end());
sort(numy.begin(), numy.end());
numy.erase(unique(numy.begin(), numy.end()), numy.end());
for (int i = 1; i <= q; i++) {
int x1 = op[i][0]; int y1 = op[i][1];
int x2 = op[i][2]; int y2 = op[i][3];
int d = op[i][4];
x1 = lower_bound(numx.begin(), numx.end(), x1 - 1) - numx.begin() + 1;
x2 = lower_bound(numx.begin(), numx.end(), x2) - numx.begin();
y1 = lower_bound(numy.begin(), numy.end(), y1 - 1) - numy.begin() + 1;
y2 = lower_bound(numy.begin(), numy.end(), y2) - numy.begin();
a[x1][y1] += d;
a[x1][y2 + 1] -= d;
a[x2 + 1][y1] -= d;
a[x2 + 1][y2 + 1] += d;
}
int nX = numx.size(), nY = numy.size();
for (int i = 1; i <= nX; i++) {
for (int j = 1; j <= nY; j++) {
a[i][j] += a[i][j - 1];
}
}
for (int i = 1; i <= nX; i++) {
for (int j = 1; j <= nY; j++) {
a[i][j] += a[i - 1][j];
}
}
ll ans = 0;
for (int i = 1; i < nX; i++) {
for (int j = 1; j < nY; j++) {
ll sz = (ll)(numx[i] - numx[i - 1]) * (numy[j] - numy[j - 1]);
if (sz % 2 == 1) ans ^= a[i][j];
}
}
printf("%lld\n", ans);
return 0;
}
作 者: itdef
欢迎转帖 请保持文本完整并注明出处
技术博客 http://www.cnblogs.com/itdef/
B站算法视频题解
https://space.bilibili.com/18508846
qq 151435887
gitee https://gitee.com/def/
欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
如果觉得不错,欢迎点赞,你的鼓励就是我的动力
欢迎转帖 请保持文本完整并注明出处
技术博客 http://www.cnblogs.com/itdef/
B站算法视频题解
https://space.bilibili.com/18508846
qq 151435887
gitee https://gitee.com/def/
欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
如果觉得不错,欢迎点赞,你的鼓励就是我的动力


【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架