# Leetcode 732
```java=
class MyCalendarThree {
private Map<Integer, Integer> vals;
private Map<Integer, Integer> lazy;
public MyCalendarThree() {
vals = new HashMap<>();
lazy = new HashMap<>();
}
public void update(int start, int end, int left, int right, int idx) {
if (start > right || end < left)
return;
if (start <= left && right <= end) {
vals.put(idx, vals.getOrDefault(idx, 0) + 1);
lazy.put(idx, lazy.getOrDefault(idx, 0) + 1);
} else {
int mid = (left + right) / 2;
update(start, end, left, mid, idx * 2);
update(start, end, mid + 1, right, idx * 2 + 1);
vals.put(idx, lazy.getOrDefault(idx, 0)
+ Math.max(vals.getOrDefault(idx * 2, 0), vals.getOrDefault(idx * 2 + 1, 0)));
}
}
public int book(int start, int end) {
update(start, end - 1, 0, 1000000000, 1);
return vals.getOrDefault(1, 0);
}
}
```