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) {
      int res = 1;
      //  按照开始时间进行升序
      //  相同则按照结束时间升序
      std::sort(startEnd.begin(), startEnd.end(), [](std::vector<int> a, std::vector<int> b) -> bool {
        if (a[0] == b[0]) {
          return a[1] < b[1];
        } else {
          return a[0] < b[0];
        }
      });
      
      std::priority_queue<int, std::vector<int>, std::greater<int>> end;
      end.push(startEnd[0][1]);
      
      for (int i = 1; i < n; ++i) {
        if (startEnd[i][0] < end.top()) {
          res += 1;
        } else {
          //  这里会用到一个end --> 怎么用其他的end
          end.pop();
        }
        end.push(startEnd[i][1]);
      }
      
      return res;
    }
};