fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. const int oo = 2e5 + 2;
  5. const int max_r = 1e9;
  6.  
  7. int n, x;
  8. int a[oo];
  9.  
  10. bool check(int mid) {
  11. bool bad[oo];
  12.  
  13. for (int i = 1; i <= n; i++) {
  14. bool l = 0;
  15. if (i > 1 && a[i] - a[i - 1] <= mid) {
  16. l = 1;
  17. }
  18.  
  19. bool r = 0;
  20. if (i < n && a[i + 1] - a[i] <= mid) {
  21. r = 1;
  22. }
  23.  
  24. bad[i] = (!l && !r);
  25. }
  26.  
  27. int cnt = 0;
  28. for (int i = 1; i <= n; i++) {
  29. if (bad[i] == 0) {
  30. continue;
  31. }
  32.  
  33. cnt++;
  34.  
  35. if (i < n && bad[i + 1] && a[i + 1] - a[i] <= 2 * mid) {
  36. i++;
  37. }
  38. }
  39.  
  40. return cnt <= x;
  41. }
  42.  
  43. void solve() {
  44. cin >> n >> x;
  45. for (int i = 1; i <= n; i++) {
  46. cin >> a[i];
  47. }
  48.  
  49. int res = max_r;
  50. int l = 1, r = max_r;
  51. while (l <= r) {
  52. int mid = l + (r - l) / 2;
  53. if (check(mid)) {
  54. res = min(res, mid);
  55. r = mid - 1;
  56. } else {
  57. l = mid + 1;
  58. }
  59. }
  60.  
  61. cout << res <<'\n';
  62. }
  63.  
  64. int main() {
  65.  
  66. int t;
  67. cin >> t;
  68. while(t--) {
  69. solve();
  70. }
  71.  
  72. return 0;
  73. }
Success #stdin #stdout 0.01s 5344KB
stdin
4
2 0
1 3
2 1
1 3
3 1
2 5 7
10 2
0 6 8 10 13 14 16 19 25 31
stdout
2
1
2
3