Ejemplo n.º 1
0
void convex_hull(points &a, points &res) {
	res.resize(2 * a.size() + 10);
	sort(a.begin(), a.end(), cmpxy);
	a.erase(unique(a.begin(), a.end()), a.end());
	int m = 0;
	for (int i = 0; i < (int)a.size(); i ++) {
		while(m > 1 && dcmp(det(res[m - 1] - res[m - 2], a[i] - res[m - 2])) <= 0) --m;
		res[m++] = a[i];
	}
	int k = m;
	for (int i = (int)a.size() - 2;  i >= 0; i --) {
		while(m > k && dcmp(det(res[m - 1] - res[m - 2], a[i] - res[m - 2])) <= 0) --m;
		res[m++] = a[i];
	}
	res.resize(m);
	//if (a.size() > 1) res.resize(m - 1);
}