欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > 矩阵Matrix(POJ2155)

矩阵Matrix(POJ2155)

2025/4/19 3:22:07 来源:https://blog.csdn.net/hjyowl/article/details/144916881  浏览:    关键词:矩阵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取模的值。

好做完了。

#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;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词