#include <iostream>
#include <set>
#include <iterator>
#include <vector>
#include <functional>
using namespace std;
template<typename C,
typename T = typename
C::value_type>
T third_max_val(const C& coll)
{
set<T, greater<T>> ret;
for(const auto& el : coll)
{
ret.insert(el);
if(ret.size() > 3u)
ret.erase(prev(ret.end()));
}
return *ret.crbegin();
}
int main() {
vector<int> nums{1,4,9,3,2,8,7};
cout << third_max_val(nums) << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c2V0PgojaW5jbHVkZSA8aXRlcmF0b3I+CiNpbmNsdWRlIDx2ZWN0b3I+CiNpbmNsdWRlIDxmdW5jdGlvbmFsPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGU8dHlwZW5hbWUgQywgCiAgICAgICAgIHR5cGVuYW1lIFQgPSB0eXBlbmFtZSAKICAgICAgICAgICAgICAgICAgICAgIEM6OnZhbHVlX3R5cGU+ClQgdGhpcmRfbWF4X3ZhbChjb25zdCBDJiBjb2xsKQp7CiAgICBzZXQ8VCwgZ3JlYXRlcjxUPj4gcmV0OwogICAgZm9yKGNvbnN0IGF1dG8mIGVsIDogY29sbCkKICAgIHsKICAgICAgICByZXQuaW5zZXJ0KGVsKTsKICAgICAgICBpZihyZXQuc2l6ZSgpID4gM3UpCiAgICAgICAgICAgIHJldC5lcmFzZShwcmV2KHJldC5lbmQoKSkpOwogICAgfQogICAgcmV0dXJuICpyZXQuY3JiZWdpbigpOwp9CgppbnQgbWFpbigpIHsKCXZlY3RvcjxpbnQ+IG51bXN7MSw0LDksMywyLDgsN307CiAgICBjb3V0IDw8IHRoaXJkX21heF92YWwobnVtcykgPDwgZW5kbDsKCXJldHVybiAwOwp9