#include <iostream>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;
int maxEqualSubsequenceLength(vector<int>& arr, int k) {
map<int, int> freqMap;
// Calculate the ranges and fill the frequency map
for (int num : arr) {
freqMap[num - k]++; // Start of the range
freqMap[num + k + 1]--; // End of the range + 1
}
int maxLength = 0;
int currentLength = 0;
// Compute prefix sums
for (auto& entry : freqMap) {
currentLength += entry.second; // Update current length
maxLength = max(maxLength, currentLength); // Update max length
}
return maxLength;
}
int main() {
vector<int> arr = {1, 2, 3, 4, 5};
int k = 1;
cout << "Maximum length of equal subsequence: " << maxEqualSubsequenceLength(arr, k) << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8bWFwPgojaW5jbHVkZSA8YWxnb3JpdGhtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmludCBtYXhFcXVhbFN1YnNlcXVlbmNlTGVuZ3RoKHZlY3RvcjxpbnQ+JiBhcnIsIGludCBrKSB7CiAgICBtYXA8aW50LCBpbnQ+IGZyZXFNYXA7CgogICAgLy8gQ2FsY3VsYXRlIHRoZSByYW5nZXMgYW5kIGZpbGwgdGhlIGZyZXF1ZW5jeSBtYXAKICAgIGZvciAoaW50IG51bSA6IGFycikgewogICAgICAgIGZyZXFNYXBbbnVtIC0ga10rKzsgLy8gU3RhcnQgb2YgdGhlIHJhbmdlCiAgICAgICAgZnJlcU1hcFtudW0gKyBrICsgMV0tLTsgLy8gRW5kIG9mIHRoZSByYW5nZSArIDEKICAgIH0KCiAgICBpbnQgbWF4TGVuZ3RoID0gMDsKICAgIGludCBjdXJyZW50TGVuZ3RoID0gMDsKCiAgICAvLyBDb21wdXRlIHByZWZpeCBzdW1zCiAgICBmb3IgKGF1dG8mIGVudHJ5IDogZnJlcU1hcCkgewogICAgICAgIGN1cnJlbnRMZW5ndGggKz0gZW50cnkuc2Vjb25kOyAvLyBVcGRhdGUgY3VycmVudCBsZW5ndGgKICAgICAgICBtYXhMZW5ndGggPSBtYXgobWF4TGVuZ3RoLCBjdXJyZW50TGVuZ3RoKTsgLy8gVXBkYXRlIG1heCBsZW5ndGgKICAgIH0KCiAgICByZXR1cm4gbWF4TGVuZ3RoOwp9CgppbnQgbWFpbigpIHsKICAgIHZlY3RvcjxpbnQ+IGFyciA9IHsxLCAyLCAzLCA0LCA1fTsKICAgIGludCBrID0gMTsKICAgIGNvdXQgPDwgIk1heGltdW0gbGVuZ3RoIG9mIGVxdWFsIHN1YnNlcXVlbmNlOiAiIDw8IG1heEVxdWFsU3Vic2VxdWVuY2VMZW5ndGgoYXJyLCBrKSA8PCBlbmRsOwogICAgcmV0dXJuIDA7Cn0K