PointInsideHull Algorithm.

Any questions do not hesitate to contact.

/**
 * Author: Johan Sannemo
 * Date: 2017-04-13
 * License: CC0
 * Source: Inspired by old, broken tinyKACTL
 * Description: Determine whether a point t lies inside a given polygon (counter-clockwise order).
 * The polygon must be such that every point on the circumference is visible from the first point in the vector.
 * It returns 0 for points outside, 1 for points on the circumference, and 2 for points inside.
 * Usage:
 * Status: Tested at Moscow ICPC pre-finals workshop
 * Time: O(\log N)
 */
#pragma once

#include "Point.h"
#include "sideOf.h"
#include "onSegment.h"

typedef Point<ll> P;
int insideHull2(const vector<P>& H, int L, int R, const P& p) {
	int len = R - L;
	if (len == 2) {
		int sa = sideOf(H[0], H[L], p);
		int sb = sideOf(H[L], H[L+1], p);
		int sc = sideOf(H[L+1], H[0], p);
		if (sa < 0 || sb < 0 || sc < 0) return 0;
		if (sb==0 || (sa==0 && L == 1) || (sc == 0 && R == sz(H)))
			return 1;
		return 2;
	}
	int mid = L + len / 2;
	if (sideOf(H[0], H[mid], p) >= 0)
		return insideHull2(H, mid, R, p);
	return insideHull2(H, L, mid+1, p);
}

int insideHull(const vector<P>& hull, const P& p) {
	if (sz(hull) < 3) return onSegment(hull[0], hull.back(), p);
	else return insideHull2(hull, 1, sz(hull), p);
}

Don't miss anything.

Keep in touch with Isaac Lozano Osorio!