#include <cmath>
#include <utility>
#include <iostream>
#include <queue>
#include <vector>
#include <memory>
#include <string>
using coordinate = std::pair<double, double>;
std::ostream& operator<<(std::ostream& os, const coordinate& c)
{
os << "(" << c.first << "," << c.second << ")";
return os;
}
int main()
{
const auto abs = [](const coordinate& c)
{
return std::sqrt(c.first * c.first + c.second + c.second);
};
const auto pred = [&abs](const coordinate& lhs, const coordinate& rhs)
{
return abs(lhs) < abs(rhs);
};
using coordinate_queue
= std::priority_queue<coordinate, std::vector<coordinate>, decltype(pred)>;
coordinate_queue pq(pred);
pq.emplace(3, 1);
pq.emplace(4, 1);
pq.emplace(5, 9);
pq.emplace(2, 6);
pq.emplace(5, 3);
while (!pq.empty())
{
std::cout << pq.top() << std::endl;
pq.pop();
}
return 0;
}
I2luY2x1ZGUgPGNtYXRoPgojaW5jbHVkZSA8dXRpbGl0eT4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8cXVldWU+CiNpbmNsdWRlIDx2ZWN0b3I+CiNpbmNsdWRlIDxtZW1vcnk+CiNpbmNsdWRlIDxzdHJpbmc+Cgp1c2luZyBjb29yZGluYXRlID0gc3RkOjpwYWlyPGRvdWJsZSwgZG91YmxlPjsKc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3MsIGNvbnN0IGNvb3JkaW5hdGUmIGMpCnsKICAgIG9zIDw8ICIoIiA8PCBjLmZpcnN0IDw8ICIsIiA8PCBjLnNlY29uZCA8PCAiKSI7CiAgICByZXR1cm4gb3M7Cn0KCmludCBtYWluKCkKewogICAgY29uc3QgYXV0byBhYnMgPSBbXShjb25zdCBjb29yZGluYXRlJiBjKQogICAgewogICAgICAgIHJldHVybiBzdGQ6OnNxcnQoYy5maXJzdCAqIGMuZmlyc3QgKyBjLnNlY29uZCArIGMuc2Vjb25kKTsKICAgIH07CiAgICBjb25zdCBhdXRvIHByZWQgPSBbJmFic10oY29uc3QgY29vcmRpbmF0ZSYgbGhzLCBjb25zdCBjb29yZGluYXRlJiByaHMpCiAgICB7CiAgICAgICAgcmV0dXJuIGFicyhsaHMpIDwgYWJzKHJocyk7CiAgICB9OwoKICAgIHVzaW5nIGNvb3JkaW5hdGVfcXVldWUKICAgICAgICA9IHN0ZDo6cHJpb3JpdHlfcXVldWU8Y29vcmRpbmF0ZSwgc3RkOjp2ZWN0b3I8Y29vcmRpbmF0ZT4sIGRlY2x0eXBlKHByZWQpPjsKICAgIGNvb3JkaW5hdGVfcXVldWUgcHEocHJlZCk7CiAgICBwcS5lbXBsYWNlKDMsIDEpOwogICAgcHEuZW1wbGFjZSg0LCAxKTsKICAgIHBxLmVtcGxhY2UoNSwgOSk7CiAgICBwcS5lbXBsYWNlKDIsIDYpOwogICAgcHEuZW1wbGFjZSg1LCAzKTsKICAgIHdoaWxlICghcHEuZW1wdHkoKSkKICAgIHsKICAgICAgICBzdGQ6OmNvdXQgPDwgcHEudG9wKCkgPDwgc3RkOjplbmRsOwogICAgICAgIHBxLnBvcCgpOwogICAgfQoKICAgIHJldHVybiAwOwp9Cg==