private:
vector<pair<int, int>> v;
vector<pair<pair<int, int>, int >> p;
map<int, int> cnt;
int N = (int) 1e9;
Node root = new Node();
public:
MyCalendarThree() {
}
class Node {
Node left, right;
int val, add;
}
void update(Node node, int start, int end, int l, int r, int val) {
if(l <= start && end <= r) {
node.val += val;
node.add += val;
return ;
}
pushDown(node);
int mid = (start + end) / 2;
if(l <= mid) update(node.left, start, end, l, r, val);
if(r > mid) update(node.right, mid + 1, end, l, r, val);
pushUp(node);
}
void pushUp(Node node){
node.val = Math.max(node.left.val, node.right.val);
}
void pushDown(Node node) {
if(node.left == null) node.left = new Node();
if(node.right == null) node.right = new Node();
if(node.add == 0) return ;
node.left.val += node.add;
node.right.val += node.add;
node.left.add += node.add;
node.right.add += node.add;
node.add = 0;
}
int query(Node node, int start, int end, int l, int r) {
if(l <= start && end <= r) return node.val;
pushDown(node);
int mid = (start + end) / 2, ans = 0;
if(l <= mid) ans = query(node.left, start, mid, l, r);
if(r > mid) ans = query(mode.right, mid, end, l, r);
return ans;
}
int book(int startTime, int endTime) {
update(root, 0, N, startTime, endTime - 1, 1);
return root.val;
}
};
/**
* Your MyCalendarThree object will be instantiated and called as such:
* MyCalendarThree* obj = new MyCalendarThree();
* int param_1 = obj->book(startTime,endTime);
*/++
https://leetcode.cn/problems/my-calendar-iii/solutions/1540274/by-lfool-jnv9