P13787 二维差分模板
Zskioaert1106 · · 题解
题目传送门:P13787 地毯 加强版
题目解法
二维差分板子。根据题目,如果有一个地毯的左上角
现在我们发现,如果
现在我们又发现,如果
现在再二维前缀和,得到的就是正确的结果了。
二维前缀和:我们设
若让
代码实现
#include<iostream>
using namespace std;
const int N=5003;
int n,m,d[N][N],f[N][N];
long long ans;
int main(){
cin>>n>>m;
while(m--){
int x1,x2,y1,y2;
cin>>x1>>y1>>x2>>y2;
d[x1][y1]++;
d[x1][y2+1]--;
d[x2+1][y1]--;
d[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]+d[i][j];
ans+=i+j^f[i][j];
}
}
cout<<ans;
return 0;
}
AC 记录。