-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathCoordinate_Compression.cpp
More file actions
33 lines (30 loc) · 1.24 KB
/
Coordinate_Compression.cpp
File metadata and controls
33 lines (30 loc) · 1.24 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#define ll long long
#define MOD 1000000007
class Solution {
public:
int rectangleArea(vector<vector<int>>& rectangles) {
int n = rectangles.size();
set < int > X, Y;
for(auto rectangle : rectangles){
X.insert(rectangle[0]); X.insert(rectangle[2]);
Y.insert(rectangle[1]); Y.insert(rectangle[3]);
}
vector < int > imapx (X.begin(), X.end());
vector < int > imapy (Y.begin(), Y.end());
map < int, int > mapx, mapy;
for(int i = 0; i < imapx.size(); i++) mapx[imapx[i]] = i;
for(int i = 0; i < imapy.size(); i++) mapy[imapy[i]] = i;
vector < vector < bool > > grid (imapx.size(), vector < bool > (imapy.size(), false));
for(auto rectangle : rectangles)
for(int i = mapx[rectangle[0]]; i < mapx[rectangle[2]]; i++)
for(int j = mapy[rectangle[1]]; j < mapy[rectangle[3]]; j++)
grid[i][j] = true;
ll ans = 0;
for(int i = 0; i < imapx.size(); i++)
for(int j = 0; j < imapy.size(); j++)
if(grid[i][j])
ans += (ll)(imapx[i+1] - imapx[i]) * (imapy[j+1] - imapy[j]);
ans %= MOD;
return (int) ans;
}
};