#include <unordered_map>
#include <vector>
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 计算成功举办活动需要多少名主持人
* @param n int整型 有n个活动
* @param startEnd int整型vector<vector<>> startEnd[i][0]用于表示第i个活动的开始时间,startEnd[i][1]表示第i个活动的结束时间
* @return int整型
*/
int minmumNumberOfHost(int n, vector<vector<int> >& startEnd) {
// write code here
sort(startEnd.begin(), startEnd.end(), [](vector<int> v1,
vector<int> v2) -> bool{
if (v1[0] == v2[0]) {
return v1[1] < v2[1];
}
return v1[0] < v2[0];
});
int ans = 1;
map<int, int> m;
m[startEnd[0][1]] = 1;
for (int i = 1; i < startEnd.size(); i++) {
map<int, int> :: iterator it = m.begin();
if (it->first <= startEnd[i][0]) {
for (int j = 0; j < it->second && i + j < startEnd.size(); j++) {
if (m.find(startEnd[i + j][1]) != m.end()) {
m[startEnd[i + j][1]]++;
} else {
m[startEnd[i + j][1]] = 1;
}
}
i += it->second - 1;
m.erase(it->first);
} else {
ans++;
if (m.find(startEnd[i][1]) != m.end()) {
m[startEnd[i][1]]++;
} else {
m[startEnd[i][1]] = 1;
}
}
}
return ans;
}
};