对于这种黄题一般都是比较简单的模板,此题为二维差分的模板。在此处本人默认都会模板。
思路:防止 TLE,我们直接开正解。在输入时直接在二维差分数组上修改。在输入后二维前缀和一遍,统计非 0 的数量即可。(不求重叠数量,只求面积,所以不用累加。)
时间复杂度:O(n²)
#include<bits/stdc++.h>
using namespace std;
const int N=1e4+19;
int n,m,a[N][N],s[N][N],ans;
int main(){
cin.tie(0)->sync_with_stdio(0);
cin>>n;
for(int i=1;i<=n;i++){
int x1,y1,x2,y2,d=1;
cin>>x1>>y1>>x2>>y2;
x1++,y1++,x2++,y2++;
s[x1][y1]+=d;
s[x1][y2]-=d;
s[x2][y1]-=d;
s[x2][y2]+=d;
}
for(int i=1;i<N;i++){
for(int j=1;j<N;j++){
s[i][j]+=s[i-1][j]+s[i][j-1]-s[i-1][j-1];
if(s[i][j]) ans++;
}
}
cout<<ans;
return 0;
}
珍惜生命,远离抄袭。