Files
java-competitive/archive/2018.10/2018.10.29 - SNCK1B19/CHEFKO.java
2019-03-15 13:47:54 +04:00

93 lines
2.0 KiB
Java

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<int[]> 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<int[]> 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<int[]> left = new TreeSet<>(COMPARATOR);
TreeSet<int[]> 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);
}
}