Advertisement
Guest User

Untitled

a guest
Sep 25th, 2017
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.33 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. #define llj(a,b,c) for (int (a) = (b); (a) < (c); (a)++)
  5. #define lli(a,b) llj(i,a,b)
  6. #define lll(i, x) llj(i, 0, x)
  7. #define fori(x) lll(i, x)
  8. #define forj(x) lll(j, x)
  9. #define fork(x) lll(k, x)
  10.  
  11. #define all(X) (X).begin(), (X).end()
  12. #define ever ;;
  13. #define fe(x, C) for (auto& x : (C))
  14. #define INF ((int) 1e9+10)
  15.  
  16. #define LINF ((ll) 1e18 + 10)
  17. #define pb push_back
  18. #define mp make_pair
  19. #define ms(arr,val) memset(arr , val , sizeof(arr))
  20. #define rint(x) scanf("%d", &(x))
  21. #define rlong(x) scanf("%lld", &(x))
  22. #define nrint(x) int x; rint(x);
  23. #define nrlong(x) long long x; rlong(x);
  24. #define rfloat(x) scanf("%lf", &(x))
  25. #define endl "\n"
  26. #define trace(X) cout << (X) << endl;
  27. #define trace2(X,Y) cout << (X) << ' ' << (Y) << endl;
  28. #define trace3(X,Y,Z) cout << (X) << ' ' << (Y) << ' ' << (Z) << endl;
  29. #define trace4(X,Y,Z,A) cout << (X) << ' ' << (Y) << ' ' << (Z) << ' ' << (A) << endl;
  30. #define tp(X) trace2(X.first ,X.second)
  31. #define vi vector<int>
  32. #define vvi vector<vector<int> >
  33. #define pvi(a) fe(thing ,a) cout << thing << ' '; cout << "\n";
  34.  
  35. typedef long long ll;
  36. typedef pair<int,int> pii;
  37. #define sz(A) ((int)A.size())
  38. #define x first
  39. #define y second
  40. #define read_speed ios::sync_with_stdio(false); cin.tie(0)
  41. #define LINE cout << endl << "--------------------------" << endl
  42. /*--------------------------THE END---------------------------------*/
  43.  
  44.  
  45. int n,k;
  46.  
  47. vector<int> x;
  48.  
  49. int Check(int dist)
  50. {
  51.  
  52. int needed = 0;
  53.  
  54. int current = 0;
  55.  
  56. while (current < n)
  57. {
  58. //cout << current << endl;
  59. int cityIndex = upper_bound(all(x), x[current] + dist) - x.begin() - 1;
  60.  
  61. int lastIndex = upper_bound(all(x), x[cityIndex] + dist) - x.begin() - 1;
  62.  
  63. current = lastIndex + 1;
  64. needed++;
  65.  
  66. //trace3(cityIndex, lastIndex, current);
  67. }
  68.  
  69.  
  70.  
  71. return needed <= k;
  72. }
  73.  
  74. int BinarySearch()
  75. {
  76. int lo = 0, hi = 1e9;
  77.  
  78. while (lo < hi)
  79. {
  80. int mid = (lo + hi) / 2;
  81.  
  82. if (Check(mid))
  83. {
  84. hi = mid;
  85. }
  86. else
  87. {
  88. lo = mid + 1;
  89. }
  90. }
  91.  
  92. return lo;
  93. }
  94.  
  95. int main()
  96. {
  97. // freopen("test.txt", "r", stdin);
  98.  
  99. cin >> n >> k;
  100.  
  101. int temp;
  102.  
  103. fori(n)
  104. {
  105. cin >> temp;
  106. x.push_back(temp);
  107. }
  108.  
  109. sort(all(x));
  110.  
  111. cout << BinarySearch() << endl;
  112.  
  113. //cout << Check(2) << endl;
  114.  
  115. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement