C++ Max Counters
#include <algorithm>
#include <vector>
std::vector<int> maxCounters(int n, const std::vector<int>& a)
{
std::vector<int> counters(n, 0);
int maxCounter = 0;
int lastUpdate = 0;
int condition = n + 1;
for (int v : a) {
if (v <= n) {
int index = v - 1;
if (counters[index] < lastUpdate) {
counters[index] = lastUpdate;
}
++counters[index];
maxCounter = std::max(maxCounter, counters[index]);
}
if (v == condition) {
lastUpdate = maxCounter;
}
}
for (int& c : counters) {
if (c < lastUpdate) {
c = lastUpdate;
}
}
return counters;
}
This delays the expensive “set all counters to max” work until it is really needed, which keeps the solution fast.