fork(1) download
  1. import java.util.*;
  2. import java.io.*;
  3.  
  4. public class Main {
  5. static StringTokenizer tok;
  6.  
  7. public static void main(String[] args) throws IOException {
  8. int T = nextInt();
  9. while (T-- > 0) {
  10. int n = nextInt();
  11. long k = nextLong();
  12. long[] a = new long[n];
  13. for (int i = 0; i < n; i++) {
  14. a[i] = nextLong();
  15. }
  16.  
  17. long left = 0, right = 0;
  18. for (int i = 1; i < n; i++) {
  19. right = Math.max(right, Math.abs(a[i] - a[i-1]));
  20. }
  21.  
  22. long ans = right;
  23. while (left <= right) {
  24. long mid = (left + right) / 2;
  25. if (check(a, mid, k)) {
  26. ans = mid;
  27. right = mid - 1;
  28. } else {
  29. left = mid + 1;
  30. }
  31. }
  32. System.out.println(ans);
  33. }
  34. }
  35.  
  36. private static boolean check(long[] a, long d, long k) {
  37. int n = a.length;
  38. long[] b = a.clone();
  39. long operations = 0;
  40. for (int i = 1; i < n; i++) {
  41. if (b[i] - b[i-1] > d) {
  42. operations += b[i] - b[i-1] - d;
  43. b[i] = b[i-1] + d;
  44. }
  45. }
  46. for (int i = n-2; i >= 0; i--) {
  47. if (b[i] - b[i+1] > d) {
  48. operations += b[i] - b[i+1] - d;
  49. b[i] = b[i+1] + d;
  50. }
  51. }
  52. return operations <= k;
  53. }
  54.  
  55. static int nextInt() throws IOException {
  56. while (tok == null || !tok.hasMoreTokens()) {
  57. tok = new StringTokenizer(br.readLine());
  58. }
  59. return Integer.parseInt(tok.nextToken());
  60. }
  61.  
  62. static long nextLong() throws IOException {
  63. while (tok == null || !tok.hasMoreTokens()) {
  64. tok = new StringTokenizer(br.readLine());
  65. }
  66. return Long.parseLong(tok.nextToken());
  67. }
  68. }
Success #stdin #stdout 0.07s 55016KB
stdin
1
5 3
3 1 5 4 1
stdout
2