2 auto cross=[](
const PL& a,
const PL& b,
const PL& c) {
4 (b.first-a.first)*(c.second-a.second)
5 -(b.second-a.second)*(c.first-a.first);
12 while(k>1 && cross(ret[k-1],ret[k-2],p[i])>0) ret.pop_back(), k--;
13 ret.push_back(p[i]); k++;
16 for(ll i=n-2; i>=0; i--) {
17 while(k>t && cross(ret[k-1],ret[k-2],p[i])>0) ret.pop_back(), k--;
18 ret.push_back(p[i]); k++;
22 for(
auto p: ret)
if(!seen.count(p)) newret.push_back(p), seen.insert(p);