和二维差分的板子一模一样啊
因为输出要保证01,可以通过与运算来特殊处理一下奇偶,来保证结果的唯一性,还是去模拟一维的差分来简化代码
#include <bits/stdc++.h>
using namespace std;
inline int read(){
int s=0,w=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();return s*w;}
const int N = 2020;
int n,m,i,j;
int a[N][N],s[N][N];
int main()
{
n=read();m=read();
while(m--){
int x1=read();int y1=read();int x2=read();int y2=read();
a[x1][y1]+=1,a[x1][y2+1]-=1,a[x2+1][y1]-=1,a[x2+1][y2+1]+=1;//+--+,放便于记忆差分
}
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
s[i][j]=s[i-1][j]+s[i][j-1]-s[i-1][j-1]+a[i][j];//预处理前缀和
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
cout<<(s[i][j]&1);//用位运算保证结果唯一性
cout<<'\n';
}
return 0;
}