#include <algorithm>
#include <iostream>
#include <vector>
template <typename T>
std::vector<std::pair<T, std::size_t>>
adjacent_count(const std::vector<T>& v)
{
std::vector<std::pair<T, std::size_t>> res;
for (auto it = v.begin(), e = v.end(); it != e; /*Empty*/) {
auto it2 = std::adjacent_find(it, e, std::not_equal_to<>{});
if (it2 != e) {
++it2;
}
res.emplace_back(*it, std::distance(it, it2));
it = it2;
}
return res;
}
int main() {
const std::vector<int> v{ 1, 1, 2, 3, 3, 3, 1, 1 };
for (const auto& p : adjacent_count(v)) {
std::cout << p.first << ":" << p.second << std::endl;
}
}
I2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CnN0ZDo6dmVjdG9yPHN0ZDo6cGFpcjxULCBzdGQ6OnNpemVfdD4+CmFkamFjZW50X2NvdW50KGNvbnN0IHN0ZDo6dmVjdG9yPFQ+JiB2KQp7CiAgICBzdGQ6OnZlY3RvcjxzdGQ6OnBhaXI8VCwgc3RkOjpzaXplX3Q+PiByZXM7CiAgICAKICAgIGZvciAoYXV0byBpdCA9IHYuYmVnaW4oKSwgZSA9IHYuZW5kKCk7IGl0ICE9IGU7IC8qRW1wdHkqLykgewogICAgICAgIGF1dG8gaXQyID0gc3RkOjphZGphY2VudF9maW5kKGl0LCBlLCBzdGQ6Om5vdF9lcXVhbF90bzw+e30pOwogICAgICAgIGlmIChpdDIgIT0gZSkgewogICAgICAgICAgICArK2l0MjsKICAgICAgICB9CiAgICAgICAgcmVzLmVtcGxhY2VfYmFjaygqaXQsIHN0ZDo6ZGlzdGFuY2UoaXQsIGl0MikpOwogICAgICAgIGl0ID0gaXQyOwogICAgfQogICAgcmV0dXJuIHJlczsKfQoKaW50IG1haW4oKSB7CiAgICBjb25zdCBzdGQ6OnZlY3RvcjxpbnQ+IHZ7IDEsIDEsIDIsIDMsIDMsIDMsIDEsIDEgfTsKCiAgICBmb3IgKGNvbnN0IGF1dG8mIHAgOiBhZGphY2VudF9jb3VudCh2KSkgewogICAgICAgIHN0ZDo6Y291dCA8PCBwLmZpcnN0IDw8ICI6IiA8PCBwLnNlY29uZCA8PCBzdGQ6OmVuZGw7CiAgICB9Cn0K