#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
class Solution {
public:
vector<int> findLocations(vector<int>& center, int d) {
sort(center.begin(), center.end());
vector<int> distances(center.size());
for (int i = 0; i < center.size(); ++i) {
distances[i] = calculateDistance(center, center[i]);
}
int right_bound = binarySearch(center, distances, d, 1);
int left_bound = binarySearch(center, distances, d, -1);
cout<<left_bound<<" "<<right_bound<<"\n";
vector<int> res;
for (int i = left_bound; i <= right_bound; ++i) {
res.push_back(i);
}
return res;
}
int binarySearch(vector<int>& center, vector<int>& distances, int d, int direction) {
int left = 0, right = center.size() - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
int calculated_distance = distances[mid];
if (direction == 1) {
if (calculated_distance < d) {
left = mid + 1;
} else {
right = mid - 1;
}
} else if (direction == -1) {
if (calculated_distance < d) {
right = mid - 1;
} else {
left = mid + 1;
}
}
}
return (direction == 1) ? left : right;
}
int calculateDistance(vector<int>& center, int mid) {
int res = 0;
for (int i : center) {
res += abs(mid - i);
}
return res;
}
};
int main() {
Solution solution;
vector<int> center = {2, 6, 3, -4};
int d = 22;
vector<int> result = solution.findLocations(center, d);
cout << "Result: ";
for (int index : result) {
cout << center[index] << " ";
}
cout << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8YWxnb3JpdGhtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNsYXNzIFNvbHV0aW9uIHsKcHVibGljOgogICAgdmVjdG9yPGludD4gZmluZExvY2F0aW9ucyh2ZWN0b3I8aW50PiYgY2VudGVyLCBpbnQgZCkgewogICAgICAgIHNvcnQoY2VudGVyLmJlZ2luKCksIGNlbnRlci5lbmQoKSk7CiAgICAgICAgdmVjdG9yPGludD4gZGlzdGFuY2VzKGNlbnRlci5zaXplKCkpOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2VudGVyLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgIGRpc3RhbmNlc1tpXSA9IGNhbGN1bGF0ZURpc3RhbmNlKGNlbnRlciwgY2VudGVyW2ldKTsKICAgICAgICB9CiAgICAgICAgaW50IHJpZ2h0X2JvdW5kID0gYmluYXJ5U2VhcmNoKGNlbnRlciwgZGlzdGFuY2VzLCBkLCAxKTsKICAgICAgICBpbnQgbGVmdF9ib3VuZCA9IGJpbmFyeVNlYXJjaChjZW50ZXIsIGRpc3RhbmNlcywgZCwgLTEpOwoJCQoJCWNvdXQ8PGxlZnRfYm91bmQ8PCIgIjw8cmlnaHRfYm91bmQ8PCJcbiI7CiAgICAgICAgdmVjdG9yPGludD4gcmVzOwogICAgICAgIGZvciAoaW50IGkgPSBsZWZ0X2JvdW5kOyBpIDw9IHJpZ2h0X2JvdW5kOyArK2kpIHsKICAgICAgICAgICAgcmVzLnB1c2hfYmFjayhpKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiByZXM7CiAgICB9CgogICAgaW50IGJpbmFyeVNlYXJjaCh2ZWN0b3I8aW50PiYgY2VudGVyLCB2ZWN0b3I8aW50PiYgZGlzdGFuY2VzLCBpbnQgZCwgaW50IGRpcmVjdGlvbikgewogICAgICAgIGludCBsZWZ0ID0gMCwgcmlnaHQgPSBjZW50ZXIuc2l6ZSgpIC0gMTsKICAgICAgICB3aGlsZSAobGVmdCA8PSByaWdodCkgewogICAgICAgICAgICBpbnQgbWlkID0gbGVmdCArIChyaWdodCAtIGxlZnQpIC8gMjsKICAgICAgICAgICAgaW50IGNhbGN1bGF0ZWRfZGlzdGFuY2UgPSBkaXN0YW5jZXNbbWlkXTsKCiAgICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT0gMSkgewogICAgICAgICAgICAgICAgaWYgKGNhbGN1bGF0ZWRfZGlzdGFuY2UgPCBkKSB7CiAgICAgICAgICAgICAgICAgICAgbGVmdCA9IG1pZCArIDE7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHJpZ2h0ID0gbWlkIC0gMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT0gLTEpIHsKICAgICAgICAgICAgICAgIGlmIChjYWxjdWxhdGVkX2Rpc3RhbmNlIDwgZCkgewogICAgICAgICAgICAgICAgICAgIHJpZ2h0ID0gbWlkIC0gMTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgbGVmdCA9IG1pZCArIDE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiAoZGlyZWN0aW9uID09IDEpID8gbGVmdCA6IHJpZ2h0OwogICAgfQoKICAgIGludCBjYWxjdWxhdGVEaXN0YW5jZSh2ZWN0b3I8aW50PiYgY2VudGVyLCBpbnQgbWlkKSB7CiAgICAgICAgaW50IHJlcyA9IDA7CiAgICAgICAgZm9yIChpbnQgaSA6IGNlbnRlcikgewogICAgICAgICAgICByZXMgKz0gYWJzKG1pZCAtIGkpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVzOwogICAgfQp9OwoKaW50IG1haW4oKSB7CiAgICBTb2x1dGlvbiBzb2x1dGlvbjsKICAgIHZlY3RvcjxpbnQ+IGNlbnRlciA9IHsyLCA2LCAzLCAtNH07CiAgICBpbnQgZCA9IDIyOwogICAgdmVjdG9yPGludD4gcmVzdWx0ID0gc29sdXRpb24uZmluZExvY2F0aW9ucyhjZW50ZXIsIGQpOwoKICAgIGNvdXQgPDwgIlJlc3VsdDogIjsKICAgIGZvciAoaW50IGluZGV4IDogcmVzdWx0KSB7CiAgICAgICAgY291dCA8PCBjZW50ZXJbaW5kZXhdIDw8ICIgIjsKICAgIH0KICAgIGNvdXQgPDwgZW5kbDsKCiAgICByZXR1cm4gMDsKfQ==