#include <bits/stdc++.h>
using namespace std;
int Sig(double a) { return a < -1e-8 ? -1 : (a > 1e-8); }
double sx, sy;
struct Point {
  double x, y;
  double angle;
  Point() {}
  Point(double x0, double y0) : x(x0), y(y0) {}
  void in() {
    scanf("%lf %lf", &x, &y);
    angle = atan2(y - sy, x - sx);
  }
  void out() { printf("%.4f %.4f\n", x + sx, y + sy); }
  double operator*(Point pt) { return x * pt.y - y * pt.x; }
  Point operator-(Point pt) { return Point(x - pt.x, y - pt.y); }
  Point operator+(Point pt) { return Point(x + pt.x, y + pt.y); }
  bool operator<(const Point &p) const { return angle < p.angle; }
} p[10];
set<Point> hull;
set<Point>::iterator ll;
Point lefthand(Point o) {
  if (hull.find(o) != hull.end()) return o;
  ll = hull.lower_bound(o);
  if (ll != hull.begin())
    return *(--ll);
  else
    return *(--hull.end());
}
Point righthand(Point o) {
  ll = hull.upper_bound(o);
  if (ll == hull.end())
    return *hull.begin();
  else
    return *ll;
}
bool Is_Inside(Point o) {
  Point l = lefthand(o);
  Point r = righthand(o);
  return Sig((r - l) * (o - l)) >= 0;
}
void addPoint(Point o) {
  if (Is_Inside(o)) return;
  while (true) {
    Point r1 = righthand(o);
    hull.erase(r1);
    Point r2 = righthand(o);
    if (Sig((r1 - o) * (r2 - r1)) > 0) {
      hull.insert(r1);
      break;
    }
  }
  while (true) {
    Point l1 = lefthand(o);
    hull.erase(l1);
    Point l2 = lefthand(o);
    if (Sig((l1 - o) * (l2 - l1)) < 0) {
      hull.insert(l1);
      break;
    }
  }
  hull.insert(o);
}
double rands[10];
void init() {
  srand(time(NULL));
  for (int i = 0; i < 3; i++) rands[i] = 1.0 * (rand() % 1000000) / 1000000.0;
}
int main() {
  init();
  int n, flag;
  scanf("%d", &n);
  sx = sy = 0;
  double sum = 0;
  for (int i = 0; i < 3; i++) {
    scanf("%d", &flag);
    p[i].in();
    sum += rands[i];
  }
  for (int i = 0; i < 3; i++) sx += p[i].x * rands[i], sy += p[i].y * rands[i];
  sx /= sum;
  sy /= sum;
  for (int i = 0; i < 3; i++) p[i].angle = atan2(p[i].y - sy, p[i].x - sx);
  hull.clear();
  for (int i = 0; i < 3; i++) hull.insert(p[i]);
  Point o;
  for (int i = 3; i < n; i++) {
    scanf("%d", &flag);
    o.in();
    if (flag == 1)
      addPoint(o);
    else {
      if (Is_Inside(o))
        printf("YES\n");
      else
        printf("NO\n");
    }
  }
  return 0;
}
