package chelper; import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.TreeSet; import io.InputReader; import io.OutputWriter; import misc.SimpleSavingChelperSolution; public class CHEFKO extends SimpleSavingChelperSolution { public static final Comparator COMPARATOR = (o1, o2) -> { for (int i = 0; i < 3; i++) { int t = Integer.compare(o1[i], o2[i]); if (t != 0) { return t; } } return 0; }; public void solve(int testNumber, InputReader in, OutputWriter out) { wrapSolve(testNumber, in, out); } @Override public void solve(int testNumber) { int n = in.nextInt(); int k = in.nextInt(); int[][] a = new int[n][2]; List events = new ArrayList<>(); for (int i = 0; i < n; i++) { a[i][0] = in.nextInt(); a[i][1] = in.nextInt(); events.add(new int[]{a[i][0], -2, i}); events.add(new int[]{a[i][1], +2, i}); } events.sort(COMPARATOR); int maxLength = 0; TreeSet left = new TreeSet<>(COMPARATOR); TreeSet right = new TreeSet<>(COMPARATOR); for (int ei = 0; ei < events.size(); ) { int t = events.get(ei)[0]; while (ei < events.size() && events.get(ei)[0] == t && events.get(ei)[1] == -2) { int i = events.get(ei)[2]; int[] key = {a[i][0], -2, i}; if (left.size() < k) { left.add(key); } else { right.add(key); } ei++; } if (events.get(ei)[0] == t && events.get(ei)[1] == +2 && left.size() == k) { maxLength = Math.max(maxLength, t - left.last()[0]); } while (ei < events.size() && events.get(ei)[0] == t && events.get(ei)[1] == +2) { int i = events.get(ei)[2]; int[] key = {a[i][0], -2, i}; if (left.contains(key)) { left.remove(key); if (!right.isEmpty()) { left.add(right.pollFirst()); } } else { right.remove(key); } ei++; } } out.println(maxLength); } }