#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;
    }
};