1065. 我的日程安排表 I

描述

实现MyCalendar类来存储您的活动。 如果新添加的活动没有重复,则可以添加。

你的类将有方法book(int start,int end)。 这代表左闭右开的间隔[start,end)有了预定,范围内的实数x,都满足start <= x < end。

当两个事件有一些非空交集时(即,两个事件在共同的时间都有预定),就会发生重复预订。

每次调用MyCalendar.book方法时,如果没有发生重复预定,那么事件可以成功添加到日历,且返回true。 否则,返回false,并且事件不会添加到日历中。

你的类以此方式被调用:MyCalendar cal = new MyCalendar(); MyCalendar.book(start, end);

每个测试样例调用 MyCalendar.book 的次数最多为 1000。
调用MyCalendar.book(start, end)时, start 和 end 都是 [0, 10^9]范围内的整数。

样例

MyCalendar();
MyCalendar.book(10, 20); // 返回true
MyCalendar.book(15, 25); // 返回false
MyCalendar.book(20, 30); // 返回true
解释:
第一个事件可以预定。 第二个不行,因为15已经被预定。
第三个事件可以预定,因为第一个事件预定了20以前的时间,但不包括20.

class MyCalendar {
public:

	map<int,int> store;
	MyCalendar() {
 
	}
	bool book(int start, int end) {
		auto next = store.lower_bound(start);
		if (next!=store.end() && next->first < min(end, next->second)) return false;
		if (next!=store.begin() && start < min((--next)->second, end)) return false;
		store.emplace(start, end);
		return true;
	}

};

/**
 * Your MyCalendar object will be instantiated and called as such:
 * MyCalendar obj = new MyCalendar();
 * bool param_1 = obj.book(start,end);
 */
原文地址:https://www.cnblogs.com/narjaja/p/10044139.html