import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 计算成功举办活动需要多少名主持人
     * @param n int整型 有n个活动
     * @param startEnd int整型二维数组 startEnd[i][0]用于表示第i个活动的开始时间,startEnd[i][1]表示第i个活动的结束时间
     * @return int整型
     */
    public int minmumNumberOfHost (int n, int[][] startEnd) {
        // write code here
        int res = 0;
        List<int[]> events = new ArrayList<>();
        for (int[] event : startEnd) {
            events.add(new int[] {event[0], -1}); //开始事件
            events.add(new int[] {event[1], 1}); //结束事件
        }
        Collections.sort(events, (o1, o2)-> {
            if (o1[0] != o2[0]) return Integer.compare(o1[0], o2[0]);
            else return o2[1] - o1[1]; //同一时刻结束事件先于开始事件计算,避免并发量溢出
        });
        int maxConcurrent = -1;
        int curConcurrent = 0;
        for (int[] eve : events) {
            if (eve[1] == -1) {
                curConcurrent++;
            } else {
                curConcurrent--;
            }
            maxConcurrent = Math.max(maxConcurrent, curConcurrent);
        }
        return maxConcurrent;
    }
}