#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
using namespace std;
template<typename T>
typename vector<T>::iterator FindFirstDuplicate( vector<T>& v, typename vector<T>::iterator& dupe )
{
auto current = v.begin();
while (
current != v.end() &&
(dupe = std::find( std::next( current ), v.end(), *current )) == v.end()
)
{
++current;
}
return current;
}
int main() {
vector<int> v = { 1,2,3,4,5,6,5,4,3 };
auto dupe = v.begin();
auto it = FindFirstDuplicate(v,dupe);
cout << "first dupe is " << *it << " at pos " << it - v.cbegin() << endl;
cout << "dupe is " << *dupe << " at pos " << dupe - v.cbegin() << endl;
std::rotate( v.begin(), it, v.end() ) ;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8aXRlcmF0b3I+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBUPgp0eXBlbmFtZSB2ZWN0b3I8VD46Oml0ZXJhdG9yIEZpbmRGaXJzdER1cGxpY2F0ZSggdmVjdG9yPFQ+JiB2LCB0eXBlbmFtZSB2ZWN0b3I8VD46Oml0ZXJhdG9yJiBkdXBlICkKewoJYXV0byBjdXJyZW50ID0gdi5iZWdpbigpOwoJCgl3aGlsZSAoCgkJY3VycmVudCAhPSB2LmVuZCgpICYmCgkJKGR1cGUgPSBzdGQ6OmZpbmQoIHN0ZDo6bmV4dCggY3VycmVudCApLCB2LmVuZCgpLCAqY3VycmVudCApKSA9PSB2LmVuZCgpCgkpCgl7CgkJKytjdXJyZW50OwoJfQoKCXJldHVybiBjdXJyZW50Owp9CgppbnQgbWFpbigpIHsKCQoJdmVjdG9yPGludD4gdiA9IHsgMSwyLDMsNCw1LDYsNSw0LDMgfTsKCWF1dG8gZHVwZSA9IHYuYmVnaW4oKTsKCWF1dG8gaXQgPSBGaW5kRmlyc3REdXBsaWNhdGUodixkdXBlKTsKCWNvdXQgPDwgImZpcnN0IGR1cGUgaXMgIiA8PCAqaXQgPDwgIiBhdCBwb3MgIiA8PCBpdCAtIHYuY2JlZ2luKCkgPDwgZW5kbDsKCWNvdXQgPDwgImR1cGUgaXMgIiA8PCAqZHVwZSA8PCAiIGF0IHBvcyAiIDw8IGR1cGUgLSB2LmNiZWdpbigpIDw8IGVuZGw7CgoJc3RkOjpyb3RhdGUoIHYuYmVnaW4oKSwgaXQsIHYuZW5kKCkgKQk7CglyZXR1cm4gMDsKfQ==