Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iomanip>
- #include <iostream>
- #include <cmath>
- #define INT_MAX 2000000000
- using namespace std;
- int binary_search(int *a, int n, int x) {
- auto L = -1;
- auto R = n;
- while (R - L > 1) {
- auto M = (L + R) / 2;
- if (a[M] < x)
- L = M;
- else
- R = M;
- }
- return R;
- }
- int main() {
- // n - stoila, k - cows
- int n, k;
- std::cin >> n >> k;
- int *count = new int[n] {0};
- int *a = new int[n];
- for (int i = 0; i < n; i++)
- cin >> a[i];
- if (k <= 2) {
- cout << a[n - 1] - a[0] << endl;
- system("pause");
- exit(0);
- }
- k -= 2;
- count[0]++;
- count[n - 1]++;
- int l = 0, r = n - 1;
- int dist, min = INT_MAX;
- while (k != 0) {
- int m = (n % 2 == 0 ? n / 2 : (n + 1) / 2);
- if (abs(a[r] - a[m]) < abs(a[l] - a[m])) {
- dist = abs(a[l] - a[m]);
- if (dist < min)
- min = dist;
- r = m;
- count[r]++;
- }
- else {
- dist = abs(a[r] - a[m]);
- if (dist < min)
- min = dist;
- l = m;
- count[l]++;
- }
- k--;
- }
- int meet = 0, z;
- for (int i = 0; i < n - 1; i++) {
- if (count[i]) {
- if (meet == 0)
- meet = i;
- else {
- z = a[i] - a[meet];
- if (z < min)
- min = z;
- }
- }
- }
- cout << min << endl;
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement