package q7; import java.util.*; public class Main { public static void main(String[] args) { // TODO 自動生成されたメソッド・スタブ Scanner sc = new Scanner(System.in); TreeMap map = new TreeMap<>(); int n = sc.nextInt(); int m = sc.nextInt(); int INF = Integer.MAX_VALUE; map.put(INF,-1); long ans = 0; long win = 0; int[] a = new int[n]; int[] t = new int[n]; for(int i = 0;i < n;i++) { a[i] = sc.nextInt(); if(!map.containsKey(a[i])) { map.put(a[i], 0); }map.put(a[i], map.get(a[i]) + 1); }int max = 0; //貪欲にやるのが最大にできそう for(int i = 0;i < m;i++) { t[i] = sc.nextInt(); int c = map.ceilingKey(t[i]); if(c == INF)break; max = i + 1; map.put(c,map.get(c) - 1); if(map.get(c) == 0)map.remove(c); }ArrayList l = new ArrayList<>(); for(int i = 0;i < max;i++) { l.add(t[i]); }Collections.sort(l,Collections.reverseOrder()); Arrays.sort(a); int left = -1; int right = 1000000001; while(left < right - 1) { int mid = (left + right)/2; int used = n; boolean ok = true; for(int i = 0;i < max;i++) { int ind = binSearch(used,a,l.get(i) + mid); if(ind == -1 || a[ind] < l.get(i))ok = false; }if(ok) { right = mid; }else { left = mid; } } System.out.print(right); }public static int binSearch(int used,int[] a,int target) { int left = -1; int right = used; while(left < right - 1) { int mid = (left + right)/2; if(a[mid] <= target) { left = mid; }else { right = mid; } }return left; } }