#include <bits/stdc++.h>
using namespace std;
int getMaxServers(vector<int>& arr) {
int n = arr.size();
if (n == 0) return 0;
if (n == 1) return 1;
// Count frequencies of each value
unordered_map<int, int> freq;
for (int val : arr) {
freq[val]++;
}
// Get all unique values and sort them
vector<int> uniqueVals;
for (auto& p : freq) {
uniqueVals.push_back(p.first);
}
sort(uniqueVals.begin(), uniqueVals.end());
int maxLength = 1;
// Try all possible consecutive ranges
for (int i = 0; i < uniqueVals.size(); i++) {
for (int j = i; j < uniqueVals.size(); j++) {
// Check if range [uniqueVals[i], uniqueVals[j]] is consecutive
bool isConsecutive = true;
for (int k = i; k < j; k++) {
if (uniqueVals[k + 1] != uniqueVals[k] + 1) {
isConsecutive = false;
break;
}
}
if (isConsecutive) {
// For a consecutive range to form a valid circle, we need to check:
// 1. Single value: always valid
// 2. Two consecutive values: always valid
// 3. Three or more: valid only if we have enough middle values to "bridge"
int rangeSize = j - i + 1;
int totalCount = 0;
for (int k = i; k <= j; k++) {
totalCount += freq[uniqueVals[k]];
}
if (rangeSize == 1) {
// Single value - always valid
maxLength = max(maxLength, totalCount);
} else if (rangeSize == 2) {
// Two consecutive values - always valid
maxLength = max(maxLength, totalCount);
} else {
// Three or more consecutive values
// We need at least 2 middle values to bridge first and last
int middleCount = 0;
for (int k = i + 1; k < j; k++) {
middleCount += freq[uniqueVals[k]];
}
if (middleCount >= 2) {
// We have enough middle elements to form a valid circle
maxLength = max(maxLength, totalCount);
}
}
}
}
}
return maxLength;
}
int main() {
// vector<int> powers = {4, 3, 5, 1, 2, 2, 1};
// vector<int> powers = {3, 7, 5, 1, 5};
// vector<int> powers = {2, 2, 3, 2, 1, 2, 2};
vector<int> powers = {1,2,3,4,5};
cout << getMaxServers(powers) << endl; // Output: 5
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgZ2V0TWF4U2VydmVycyh2ZWN0b3I8aW50PiYgYXJyKSB7CiAgICBpbnQgbiA9IGFyci5zaXplKCk7CiAgICBpZiAobiA9PSAwKSByZXR1cm4gMDsKICAgIGlmIChuID09IDEpIHJldHVybiAxOwogICAgCiAgICAvLyBDb3VudCBmcmVxdWVuY2llcyBvZiBlYWNoIHZhbHVlCiAgICB1bm9yZGVyZWRfbWFwPGludCwgaW50PiBmcmVxOwogICAgZm9yIChpbnQgdmFsIDogYXJyKSB7CiAgICAgICAgZnJlcVt2YWxdKys7CiAgICB9CiAgICAKICAgIC8vIEdldCBhbGwgdW5pcXVlIHZhbHVlcyBhbmQgc29ydCB0aGVtCiAgICB2ZWN0b3I8aW50PiB1bmlxdWVWYWxzOwogICAgZm9yIChhdXRvJiBwIDogZnJlcSkgewogICAgICAgIHVuaXF1ZVZhbHMucHVzaF9iYWNrKHAuZmlyc3QpOwogICAgfQogICAgc29ydCh1bmlxdWVWYWxzLmJlZ2luKCksIHVuaXF1ZVZhbHMuZW5kKCkpOwogICAgCiAgICBpbnQgbWF4TGVuZ3RoID0gMTsKICAgIAogICAgLy8gVHJ5IGFsbCBwb3NzaWJsZSBjb25zZWN1dGl2ZSByYW5nZXMKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdW5pcXVlVmFscy5zaXplKCk7IGkrKykgewogICAgICAgIGZvciAoaW50IGogPSBpOyBqIDwgdW5pcXVlVmFscy5zaXplKCk7IGorKykgewogICAgICAgICAgICAvLyBDaGVjayBpZiByYW5nZSBbdW5pcXVlVmFsc1tpXSwgdW5pcXVlVmFsc1tqXV0gaXMgY29uc2VjdXRpdmUKICAgICAgICAgICAgYm9vbCBpc0NvbnNlY3V0aXZlID0gdHJ1ZTsKICAgICAgICAgICAgZm9yIChpbnQgayA9IGk7IGsgPCBqOyBrKyspIHsKICAgICAgICAgICAgICAgIGlmICh1bmlxdWVWYWxzW2sgKyAxXSAhPSB1bmlxdWVWYWxzW2tdICsgMSkgewogICAgICAgICAgICAgICAgICAgIGlzQ29uc2VjdXRpdmUgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKGlzQ29uc2VjdXRpdmUpIHsKICAgICAgICAgICAgICAgIC8vIEZvciBhIGNvbnNlY3V0aXZlIHJhbmdlIHRvIGZvcm0gYSB2YWxpZCBjaXJjbGUsIHdlIG5lZWQgdG8gY2hlY2s6CiAgICAgICAgICAgICAgICAvLyAxLiBTaW5nbGUgdmFsdWU6IGFsd2F5cyB2YWxpZAogICAgICAgICAgICAgICAgLy8gMi4gVHdvIGNvbnNlY3V0aXZlIHZhbHVlczogYWx3YXlzIHZhbGlkICAKICAgICAgICAgICAgICAgIC8vIDMuIFRocmVlIG9yIG1vcmU6IHZhbGlkIG9ubHkgaWYgd2UgaGF2ZSBlbm91Z2ggbWlkZGxlIHZhbHVlcyB0byAiYnJpZGdlIgogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBpbnQgcmFuZ2VTaXplID0gaiAtIGkgKyAxOwogICAgICAgICAgICAgICAgaW50IHRvdGFsQ291bnQgPSAwOwogICAgICAgICAgICAgICAgZm9yIChpbnQgayA9IGk7IGsgPD0gajsgaysrKSB7CiAgICAgICAgICAgICAgICAgICAgdG90YWxDb3VudCArPSBmcmVxW3VuaXF1ZVZhbHNba11dOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBpZiAocmFuZ2VTaXplID09IDEpIHsKICAgICAgICAgICAgICAgICAgICAvLyBTaW5nbGUgdmFsdWUgLSBhbHdheXMgdmFsaWQKICAgICAgICAgICAgICAgICAgICBtYXhMZW5ndGggPSBtYXgobWF4TGVuZ3RoLCB0b3RhbENvdW50KTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmFuZ2VTaXplID09IDIpIHsKICAgICAgICAgICAgICAgICAgICAvLyBUd28gY29uc2VjdXRpdmUgdmFsdWVzIC0gYWx3YXlzIHZhbGlkCiAgICAgICAgICAgICAgICAgICAgbWF4TGVuZ3RoID0gbWF4KG1heExlbmd0aCwgdG90YWxDb3VudCk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIC8vIFRocmVlIG9yIG1vcmUgY29uc2VjdXRpdmUgdmFsdWVzCiAgICAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCBhdCBsZWFzdCAyIG1pZGRsZSB2YWx1ZXMgdG8gYnJpZGdlIGZpcnN0IGFuZCBsYXN0CiAgICAgICAgICAgICAgICAgICAgaW50IG1pZGRsZUNvdW50ID0gMDsKICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBrID0gaSArIDE7IGsgPCBqOyBrKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgbWlkZGxlQ291bnQgKz0gZnJlcVt1bmlxdWVWYWxzW2tdXTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgaWYgKG1pZGRsZUNvdW50ID49IDIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBlbm91Z2ggbWlkZGxlIGVsZW1lbnRzIHRvIGZvcm0gYSB2YWxpZCBjaXJjbGUKICAgICAgICAgICAgICAgICAgICAgICAgbWF4TGVuZ3RoID0gbWF4KG1heExlbmd0aCwgdG90YWxDb3VudCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgCiAgICByZXR1cm4gbWF4TGVuZ3RoOwp9CgppbnQgbWFpbigpIHsKICAgIC8vIHZlY3RvcjxpbnQ+IHBvd2VycyA9IHs0LCAzLCA1LCAxLCAyLCAyLCAxfTsKICAgIC8vIHZlY3RvcjxpbnQ+IHBvd2VycyA9IHszLCA3LCA1LCAxLCA1fTsKICAgIC8vIHZlY3RvcjxpbnQ+IHBvd2VycyA9IHsyLCAyLCAzLCAyLCAxLCAyLCAyfTsKICAgIHZlY3RvcjxpbnQ+IHBvd2VycyA9IHsxLDIsMyw0LDV9OwogICAgY291dCA8PCBnZXRNYXhTZXJ2ZXJzKHBvd2VycykgPDwgZW5kbDsgIC8vIE91dHB1dDogNQogICAgcmV0dXJuIDA7Cn0=