想到了会比较简单,二维差分维护即可,不过我觉得我得复习一下线段树了。
#include <bits/stdc++.h>
using namespace std;
const int N = 2010;
int n, m;
int g[N][N], f[N][N];
int main()
{
scanf("%d%d", &n, &m);
for (int i = 1; i <= m; ++ i)
{
int x1, y1, x2, y2;
scanf("%d%d%d%d", &x1, &y1, &x2, &y2);
g[x1][y1] ++, g[x2 + 1][y1] --, g[x1][y2 + 1] --, g[x2 + 1][y2 + 1] ++;
// 对区块进行操作,且只有一种, 所以是差分,不然就得线段树了
}
for (int i = 1; i <= n; ++ i)
for (int j = 1; j <= n; ++ j)
f[i][j] = f[i - 1][j] + f[i][j - 1] - f[i - 1][j - 1] + g[i][j];
for (int i = 1; i <= n; ++ i)
{
for (int j = 1; j <= n; ++ j)
printf("%d", f[i][j] % 2);
cout << endl;
}
return 0;
}