#include <bits/stdc++.h>
using namespace std;
const double eps = 1e-7;
double ox, oy;
inline int dcmp(double x) {
  if (fabs(x) < eps) return 0;
  return x < 0 ? -1 : 1;
}
struct point {
  double x, y, ang;
  point() {}
  point(double a, double b) : x(a), y(b) { ang = atan2(y - oy, x - ox); }
  point operator-(const point a) const { return point(x - a.x, y - a.y); }
  bool operator<(const point a) const {
    return dcmp(ang - a.ang) == 0
               ? dcmp((x - ox) * (x - ox) - (a.x - ox) * (a.x - ox) +
                      (y - oy) * (y - oy) - (a.y - oy) * (a.y - oy)) < 0
               : dcmp(ang - a.ang) < 0;
  }
  bool operator==(const point a) const {
    return dcmp(ang - a.ang) == 0 &&
           dcmp((x - ox) * (x - ox) - (a.x - ox) * (a.x - ox) +
                (y - oy) * (y - oy) - (a.y - oy) * (a.y - oy)) == 0;
  }
} p[5];
set<point> s;
inline double cross(point a, point b) { return a.x * b.y - a.y * b.x; }
inline set<point>::iterator l(set<point>::iterator x) {
  if (x == s.begin()) x = s.end();
  x--;
  return x;
}
inline set<point>::iterator r(set<point>::iterator x) {
  x++;
  if (x == s.end()) x = s.begin();
  return x;
}
inline bool check_inside(point p) {
  if (s.size() < 3) return 0;
  set<point>::iterator a, b = s.lower_bound(p);
  if (b == s.end()) b = s.begin();
  a = l(b);
  return dcmp(cross(p - *a, *b - p)) <= 0;
}
inline void push(point p) {
  if (check_inside(p)) return;
  s.insert(p);
  set<point>::iterator pos = s.find(p), b = l(pos), a = l(b);
  while (dcmp(cross(*b - *a, p - *b)) <= 0) s.erase(b), b = a, a = l(a);
  a = r(pos), b = r(a);
  while (dcmp(cross(*a - p, *b - *a)) <= 0) s.erase(a), a = b, b = r(b);
}
int main() {
  int n, t;
  double a, b;
  scanf("%d", &n);
  for (int i = 0; i < 3; i++) {
    scanf("%d%lf%lf", &t, &p[i].x, &p[i].y);
    ox += p[i].x, oy += p[i].y;
    p[i].x *= 3, p[i].y *= 3;
  }
  for (int i = 0; i < 3; i++) p[i] = point(p[i].x, p[i].y), s.insert(p[i]);
  n -= 3;
  while (n--) {
    scanf("%d%lf%lf", &t, &a, &b), a *= 3, b *= 3;
    if (t == 1)
      push(point(a, b));
    else
      puts(check_inside(point(a, b)) ? "YES" : "NO");
  }
}
