B - Overlapping sheets 解説
by
houren
より高速な解法
この問題は、2次元imos法を用いることで\(O(N+\max(A_i) \max(B_i))\) で解くことができます。
028 - Cluttered Paper(★4)において、\(k\geq1\)となるマスの個数を求めると考えるのが良いでしょう。
C++による実装例:
#include <bits/stdc++.h>
using namespace std;
int main(){
int n, ans = 0;
cin >> n;
vector<vector<int>> imos(101,vector<int>(101,0));
for(int i=0;i<n;i++){
int a, b, c, d;
cin >> a >> b >> c >> d;
imos[a][c]++;
imos[a][d]--;
imos[b][c]--;
imos[b][d]++;
}
for(int i=0;i<101;i++) for(int j=0;j<100;j++) imos[i][j+1] += imos[i][j];
for(int i=0;i<100;i++) for(int j=0;j<101;j++) imos[i+1][j] += imos[i][j];
for(int i=0;i<100;i++) for(int j=0;j<100;j++) if(imos[i][j]>0) ans++;
cout << ans << '\n';
return 0;
}
投稿日時:
最終更新: