1
var rectangleArea = function (rectangles) {
2
let events = [],
3
active = [],
4
area = 0n;
5
let mod = BigInt(1000000007);
6

7
for (var rec of rectangles) {
8
events.push([rec[1], "open", rec[0], rec[2]]);
9
events.push([rec[3], "close", rec[0], rec[2]]);
10
}
11

12
events = events.sort((a, b) => a[0] - b[0]);
13
let y = events[0][0];
14

15
for (var event of events) {
16
let currY = event[0],
17
type = event[1],
18
x1 = event[2],
19
x2 = event[3];
20
let maxLength = 0,
21
curr = -1;
22

23
for (var ev of active) {
24
curr = Math.max(curr, ev[0]);
25
maxLength += Math.max(0, ev[1] - curr);
26
curr = Math.max(curr, ev[1]);
27
}
28

29
area += BigInt(maxLength) * BigInt(currY - y);
30
area %= mod;
31

32
if (type === "open") {
33
active.push([x1, x2]);
34
active = active.sort((a, b) => a[0] - b[0]);
35
} else {
36
for (var i = 0; i < active.length; i++) {
37
let e = active[i];
38
if (e[0] === x1 && e[1] === x2) {
39
active.splice(i, 1);
40
break;
41
}
42
}
43
}
44

45
y = currY;
46
}
47

48
return area % mod;
49
};

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0