矩阵Matrix(POJ2155)

给一个N*N的矩阵A,其中元素是0或1。A[i][j]表示在第i行第j列的数。最初时,A[i][j]=0(1<=i,j<=N)。我们以以下方式来改变矩阵,给定一个矩形的左上角为(x1,y1)和右下角为(x2,y2),我们对这个矩形范围内的所有元素进行"非"操作(如果它是一个'0',那么变化为'1',否则它变为'0')。

请你编写一个程序完成以下两种操作:

比较简单

用二维树状数组,每次区间增加1,然后单点查询每一个点对2取模的值。

好做完了。

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
const long long N = 1050;
long long n,m;
class owl{
public:
	long long tr[N][N];
	long long lowbit(long long x){
		return x & -x;
	}
	void add(long long x,long long y,long long d){
		for (long long i = x; i <= n; i += lowbit(i)){
			for (long long j = y; j <= n; j += lowbit(j)){
				tr[i][j] += d;
			}
		}
	}
	long long sum(long long x,long long y){
		long long res = 0;
		for (long long i = x; i ; i -= lowbit(i)){
			for (long long j = y; j; j -= lowbit(j)){
				res += tr[i][j];
			}
		}
		return res;
	}
}A,B,C,D;
void owladd(long long a,long long b,long long c){
	A.add(a,b,c);
	B.add(a,b,c * a);
	C.add(a,b,c * b);
	D.add(a,b,a * b * c);
}
long long owlsum(long long a,long long b){
	return A.sum(a,b) * (a * b + a + b + 1) - B.sum(a,b) * (b + 1) - C.sum(a,b) * (a + 1) + D.sum(a,b);
}
int main(){
	int T;
	cin >> T;
	while (T -- ){
		cin >> n >> m;
		memset(A.tr,0,sizeof A.tr);
				memset(B.tr,0,sizeof B.tr);
				memset(C.tr,0,sizeof C.tr);
				memset(D.tr,0,sizeof D.tr);
		while (m -- ){
			char op;
			cin >> op;
			if (op == 'C'){
				long long a,b,c,d,z = 1;
				cin >> a >> b >> c >> d;
				owladd(a,b,z);
				owladd(a,d + 1,-z);
				owladd(c + 1,b,-z);
				owladd(c + 1,d + 1,z);
			}
			else if (op == 'Q'){
				long long a,b,c,d;
				cin >> a >> b;
				c = a,d = b;
				cout << (owlsum(c,d) - owlsum(a - 1,d) - owlsum(c,b - 1) + owlsum(a - 1,b - 1)) % 2 << endl;
			}
		}
		cout << endl;
	}
	return 0;
}
相关推荐
夏鹏今天学习了吗6 小时前
【LeetCode热题100(82/100)】单词拆分
算法·leetcode·职场和发展
mit6.8247 小时前
mysql exe
算法
2501_901147837 小时前
动态规划在整除子集问题中的应用与高性能实现分析
算法·职场和发展·动态规划
中草药z7 小时前
【嵌入模型】概念、应用与两大 AI 开源社区(Hugging Face / 魔塔)
人工智能·算法·机器学习·数据集·向量·嵌入模型
知乎的哥廷根数学学派8 小时前
基于数据驱动的自适应正交小波基优化算法(Python)
开发语言·网络·人工智能·pytorch·python·深度学习·算法
ADI_OP8 小时前
ADAU1452的开发教程10:逻辑算法模块
算法·adi dsp中文资料·adi dsp·adi音频dsp·adi dsp开发教程·sigmadsp的开发详解
xingzhemengyou18 小时前
C语言 查找一个字符在字符串中第i次出现的位置
c语言·算法
小六子成长记10 小时前
【C++】:搜索二叉树的模拟实现
数据结构·c++·算法
汉克老师10 小时前
GESP2025年9月认证C++二级真题与解析(编程题1(优美的数字))
c++·算法·整除·枚举算法·求余·拆数
Zevalin爱灰灰11 小时前
现代控制理论——第二章 系统状态空间表达式的解
线性代数·算法·现代控制