#include <algorithm>
#include <iterator>
#include <iostream>
#include <ostream>
#include <vector>
using namespace std;
template<typename RandomAccessIterator>
RandomAccessIterator median(RandomAccessIterator first,RandomAccessIterator last)
{
RandomAccessIterator m = first + distance(first,last)/2; // handle even middle if needed
nth_element(first,m,last);
return m;
}
int main()
{
vector<int> values = {5,1,2,4,3};
cout << *median(begin(values),end(values)) << endl;
}
I2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGl0ZXJhdG9yPgojaW5jbHVkZSA8aW9zdHJlYW0+CiNpbmNsdWRlIDxvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnRlbXBsYXRlPHR5cGVuYW1lIFJhbmRvbUFjY2Vzc0l0ZXJhdG9yPgpSYW5kb21BY2Nlc3NJdGVyYXRvciBtZWRpYW4oUmFuZG9tQWNjZXNzSXRlcmF0b3IgZmlyc3QsUmFuZG9tQWNjZXNzSXRlcmF0b3IgbGFzdCkKewogICBSYW5kb21BY2Nlc3NJdGVyYXRvciBtID0gZmlyc3QgKyBkaXN0YW5jZShmaXJzdCxsYXN0KS8yOyAvLyBoYW5kbGUgZXZlbiBtaWRkbGUgaWYgbmVlZGVkCiAgIG50aF9lbGVtZW50KGZpcnN0LG0sbGFzdCk7CiAgIHJldHVybiBtOwp9CgppbnQgbWFpbigpCnsKICAgdmVjdG9yPGludD4gdmFsdWVzID0gezUsMSwyLDQsM307CiAgIGNvdXQgPDwgKm1lZGlhbihiZWdpbih2YWx1ZXMpLGVuZCh2YWx1ZXMpKSA8PCBlbmRsOwp9Cg==