Kyopro Library
 
読み取り中…
検索中…
一致する文字列を見つけられません
convex_hull.hpp
[詳解]
2 auto cross=[](const PL& a, const PL& b, const PL& c) {
3 return
4 (b.first-a.first)*(c.second-a.second)
5 -(b.second-a.second)*(c.first-a.first);
6 };
7 sort(ALL(p));
8
9 ll n=p.size();
10 VP ret; int k=0;
11 REP(i,n) {
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++;
14 }
15 ll t=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++;
19 }
20 set<PL> seen;
21 VP newret;
22 for(auto p: ret) if(!seen.count(p)) newret.push_back(p), seen.insert(p);
23
24 return newret;
25}
VP ConvexHull(VP p)