#include <vector>
#include <set>
#include <algorithm>
#include <iostream>
#include <iterator>
using namespace std;
vector<int> findDublicates(vector<int> const& v)
{
typedef std::set<int> DupSet;
DupSet ds;
DupSet ds2;
vector<int> dublicates;
for_each(v.begin(), v.end(), [&](int n)
{if (ds.find(n) != ds.end()) ds2.insert(n); ds.insert(n); });
copy(ds2.begin(), ds2.end(), std::back_inserter(dublicates));
return dublicates;
}
int main()
{
vector<int> test = { 1, 2, 3, 4, 5, 1, 2, 3, 7 };
vector<int> out = findDublicates(test);
copy(out.begin(), out.end(), ostream_iterator<int>(cout, " "));
}
I2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPHNldD4KI2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aXRlcmF0b3I+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdmVjdG9yPGludD4gZmluZER1YmxpY2F0ZXModmVjdG9yPGludD4gY29uc3QmIHYpCnsKICAgIHR5cGVkZWYgc3RkOjpzZXQ8aW50PiBEdXBTZXQ7CiAgICBEdXBTZXQgZHM7CiAgICBEdXBTZXQgZHMyOwogICAgdmVjdG9yPGludD4gZHVibGljYXRlczsKICAgIGZvcl9lYWNoKHYuYmVnaW4oKSwgdi5lbmQoKSwgWyZdKGludCBuKSAKICAgICAgICAgICAge2lmIChkcy5maW5kKG4pICE9IGRzLmVuZCgpKSBkczIuaW5zZXJ0KG4pOyBkcy5pbnNlcnQobik7IH0pOwogICAgY29weShkczIuYmVnaW4oKSwgZHMyLmVuZCgpLCBzdGQ6OmJhY2tfaW5zZXJ0ZXIoZHVibGljYXRlcykpOwogICAgcmV0dXJuIGR1YmxpY2F0ZXM7Cn0KCmludCBtYWluKCkKewogICAgdmVjdG9yPGludD4gdGVzdCA9IHsgMSwgMiwgMywgNCwgNSwgMSwgMiwgMywgNyB9OwogICAgdmVjdG9yPGludD4gb3V0ID0gZmluZER1YmxpY2F0ZXModGVzdCk7CiAgICBjb3B5KG91dC5iZWdpbigpLCBvdXQuZW5kKCksIG9zdHJlYW1faXRlcmF0b3I8aW50Pihjb3V0LCAiICIpKTsKfQ==