fork download
  1. import java.util.*;
  2. import java.io.*;
  3.  
  4. class Main
  5. {
  6.  
  7. public static void main(String args[]) throws Exception
  8. {
  9. /*
  10. int[] t = {2, 4, 6, 8, 10};
  11.   System.out.println(getLastSmaller(t, 300));
  12. System.out.println(getLastSmaller(t, 0));
  13.   System.out.println(getLastSmaller(t, 7));
  14. System.out.println(getFirstLarger(t, 300));
  15.   System.out.println(getFirstLarger(t, 0));
  16.   System.out.println(getFirstLarger(t, 7));
  17. int[] t2 = {1, 3, 5, 7};
  18. System.out.println(getLastSmaller(t2, 300));
  19.   System.out.println(getLastSmaller(t2, 0));
  20.   System.out.println(getLastSmaller(t2, 6));
  21.   System.out.println(getFirstLarger(t2, 300));
  22.   System.out.println(getFirstLarger(t2, 0));
  23.   System.out.println(getFirstLarger(t2, 6));
  24. */
  25. StringTokenizer st = new StringTokenizer(b.readLine());
  26. int n = Integer.parseInt(st.nextToken());
  27. int x = Integer.parseInt(st.nextToken());
  28. int y = Integer.parseInt(st.nextToken());
  29.  
  30. Integer[][] contest = new Integer[n][2];
  31. int[] wormholeV = new int[x];
  32. int[] wormholew = new int[y];
  33. for (int i = 0; i < n; i++)
  34. {
  35. String[] splt = b.readLine().split("\\s");
  36. contest[i][0] = Integer.parseInt(splt[0].trim());
  37. contest[i][1] = Integer.parseInt(splt[1].trim());
  38. }
  39.  
  40. String[] V = b.readLine().split("\\s");
  41. for (int i = 0; i < x; i++)
  42. {
  43. wormholeV[i] = Integer.parseInt(V[i].trim());
  44. }
  45. String[] W = b.readLine().split("\\s");
  46. for (int i = 0; i < y; i++)
  47. {
  48. wormholew[i] = Integer.parseInt(W[i].trim());
  49. }
  50.  
  51. Arrays.sort(contest, new Comparator<Integer[]>(){
  52. public int compare(Integer[] a, Integer[] b)
  53. {
  54. return Integer.compare(a[0], b[0]);
  55. }
  56. });
  57.  
  58. Arrays.sort(wormholeV);
  59. Arrays.sort(wormholew);
  60.  
  61. int min = -1;
  62. for (int i = 0; i < contest.length; i++)
  63. {
  64. int left = getLastSmaller(wormholeV, contest[i][0]);
  65. int right = getFirstLarger(wormholew, contest[i][1]);
  66. if (left == -1 || right == -1)
  67. continue;
  68.  
  69. int m = wormholew[right] - wormholeV[left] + 1;
  70. if (min == -1 || m < min)
  71. {
  72. min = m;
  73. }
  74. }
  75.  
  76. System.out.print(min);
  77. }
  78.  
  79. public static int getPos(int[]x, int element, int start, int end)
  80. {
  81. int mid = -1;
  82. while(start <= end)
  83. {
  84. mid = start + (end - start)/2;
  85. if (x[mid] == element)
  86. return mid;
  87.  
  88. if (element > x[mid])
  89. start = mid + 1;
  90. else
  91. end = mid - 1;
  92. }
  93. return mid;
  94. }
  95.  
  96. public static int getLastSmaller(int[]x, int element)
  97. {
  98. int m = getPos(x, element, 0, x.length - 1);
  99. if (m < 0)
  100. return m;
  101.  
  102. if (x[m] == element)
  103. return m;
  104.  
  105. return element < x[m] ? m - 1 : m;
  106. }
  107.  
  108. public static int getFirstLarger(int[]x, int element)
  109. {
  110. int m = getPos(x, element, 0, x.length - 1);
  111. if (m < 0)
  112. return 0;
  113. if (x[m] < element && m == x.length - 1)
  114. return -1;
  115. if (x[m] == element)
  116. return m;
  117.  
  118. return x[m] < element ? m + 1 : m;
  119. }
  120.  
  121. }
Success #stdin #stdout 0.04s 4386816KB
stdin
3 4 2
15 21
5 10
7 25
4 14 25 2
13 21
stdout
8