#include <bits/stdc++.h>
using namespace std;
pair<int, int> findMaxAndSecondMax(const std::vector<int>& arr) {
int maxIndex = -1;
int secondMaxIndex = -1;
if (arr.size() < 2) {
return {-1, -1};
}
if (arr[0] >= arr[1]) {
maxIndex = 0;
secondMaxIndex = 1;
} else {
maxIndex = 1;
secondMaxIndex = 0;
}
for (int i = 2; i < arr.size(); ++i) {
if (arr[i] > arr[maxIndex]) {
secondMaxIndex = maxIndex;
maxIndex = i;
} else if (arr[i] > arr[secondMaxIndex] && arr[i] < arr[maxIndex]) {
secondMaxIndex = i;
}
}
if (arr[maxIndex] == arr[secondMaxIndex]) {
return {-1, -1};
}
return {maxIndex, secondMaxIndex};
}
bool areAllElementsEqual(vector<int>& arr) {
if (arr.empty()) {
return true;
}
for (int i = 1; i < arr.size(); ++i) {
if (arr[i] != arr[0]) {
return false;
}
}
return true;
}
int minSteps(vector<int>& arr) {
int count = 0;
while (!areAllElementsEqual(arr)) {
pair<int, int> indices = findMaxAndSecondMax(arr);
if (indices.first == -1) {
// This happens when all elements are already equal
break;
}
int maxIndex = indices.first;
int secondMaxIndex = indices.second;
arr[maxIndex] = arr[secondMaxIndex];
count++;
}
return count;
}
int main() {
vector<int> arr1 = {4, 5, 5, 2, 4};
cout << "Steps for {4, 5, 5, 2, 4}: " << minSteps(arr1) << std::endl;
vector<int> arr2 = {886, 777};
cout << "Steps for {886, 777}: " << minSteps(arr2) << std::endl;
vector<int> arr3 = {1, 1, 1, 1};
cout << "Steps for {1, 1, 1, 1}: " << minSteps(arr3) << std::endl;
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpwYWlyPGludCwgaW50PiBmaW5kTWF4QW5kU2Vjb25kTWF4KGNvbnN0IHN0ZDo6dmVjdG9yPGludD4mIGFycikgewogICAgaW50IG1heEluZGV4ID0gLTE7CiAgICBpbnQgc2Vjb25kTWF4SW5kZXggPSAtMTsKICAgIAogICAgaWYgKGFyci5zaXplKCkgPCAyKSB7CiAgICAgICAgcmV0dXJuIHstMSwgLTF9OwogICAgfQoKICAgIGlmIChhcnJbMF0gPj0gYXJyWzFdKSB7CiAgICAgICAgbWF4SW5kZXggPSAwOwogICAgICAgIHNlY29uZE1heEluZGV4ID0gMTsKICAgIH0gZWxzZSB7CiAgICAgICAgbWF4SW5kZXggPSAxOwogICAgICAgIHNlY29uZE1heEluZGV4ID0gMDsKICAgIH0KICAgIGZvciAoaW50IGkgPSAyOyBpIDwgYXJyLnNpemUoKTsgKytpKSB7CiAgICAgICAgaWYgKGFycltpXSA+IGFyclttYXhJbmRleF0pIHsKICAgICAgICAgICAgc2Vjb25kTWF4SW5kZXggPSBtYXhJbmRleDsKICAgICAgICAgICAgbWF4SW5kZXggPSBpOwogICAgICAgIH0gZWxzZSBpZiAoYXJyW2ldID4gYXJyW3NlY29uZE1heEluZGV4XSAmJiBhcnJbaV0gPCBhcnJbbWF4SW5kZXhdKSB7CiAgICAgICAgICAgIHNlY29uZE1heEluZGV4ID0gaTsKICAgICAgICB9CiAgICB9CiAgICAKICAgIGlmIChhcnJbbWF4SW5kZXhdID09IGFycltzZWNvbmRNYXhJbmRleF0pIHsKICAgICAgICByZXR1cm4gey0xLCAtMX07CiAgICB9CiAgICAKICAgIHJldHVybiB7bWF4SW5kZXgsIHNlY29uZE1heEluZGV4fTsKfQoKYm9vbCBhcmVBbGxFbGVtZW50c0VxdWFsKHZlY3RvcjxpbnQ+JiBhcnIpIHsKICAgIGlmIChhcnIuZW1wdHkoKSkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgZm9yIChpbnQgaSA9IDE7IGkgPCBhcnIuc2l6ZSgpOyArK2kpIHsKICAgICAgICBpZiAoYXJyW2ldICE9IGFyclswXSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIHRydWU7Cn0KCmludCBtaW5TdGVwcyh2ZWN0b3I8aW50PiYgYXJyKSB7CiAgICBpbnQgY291bnQgPSAwOwogICAgd2hpbGUgKCFhcmVBbGxFbGVtZW50c0VxdWFsKGFycikpIHsKICAgICAgICBwYWlyPGludCwgaW50PiBpbmRpY2VzID0gZmluZE1heEFuZFNlY29uZE1heChhcnIpOwogICAgICAgIAogICAgICAgIGlmIChpbmRpY2VzLmZpcnN0ID09IC0xKSB7CiAgICAgICAgICAgIC8vIFRoaXMgaGFwcGVucyB3aGVuIGFsbCBlbGVtZW50cyBhcmUgYWxyZWFkeSBlcXVhbAogICAgICAgICAgICBicmVhazsgCiAgICAgICAgfQoKICAgICAgICBpbnQgbWF4SW5kZXggPSBpbmRpY2VzLmZpcnN0OwogICAgICAgIGludCBzZWNvbmRNYXhJbmRleCA9IGluZGljZXMuc2Vjb25kOwogICAgICAgIAoJCWFyclttYXhJbmRleF0gPSBhcnJbc2Vjb25kTWF4SW5kZXhdOyAgICAgCiAgICAgICAgCiAgICAgICAgY291bnQrKzsKICAgIH0KICAgIHJldHVybiBjb3VudDsKfQoKaW50IG1haW4oKSB7CiAgICB2ZWN0b3I8aW50PiBhcnIxID0gezQsIDUsIDUsIDIsIDR9OwogICAgY291dCA8PCAiU3RlcHMgZm9yIHs0LCA1LCA1LCAyLCA0fTogIiA8PCBtaW5TdGVwcyhhcnIxKSA8PCBzdGQ6OmVuZGw7CiAgICAKICAgIHZlY3RvcjxpbnQ+IGFycjIgPSB7ODg2LCA3Nzd9OwogICAgY291dCA8PCAiU3RlcHMgZm9yIHs4ODYsIDc3N306ICIgPDwgbWluU3RlcHMoYXJyMikgPDwgc3RkOjplbmRsOwogICAgCiAgICB2ZWN0b3I8aW50PiBhcnIzID0gezEsIDEsIDEsIDF9OwogICAgY291dCA8PCAiU3RlcHMgZm9yIHsxLCAxLCAxLCAxfTogIiA8PCBtaW5TdGVwcyhhcnIzKSA8PCBzdGQ6OmVuZGw7CiAgICAKICAgIHJldHVybiAwOwp9