#include <bits/stdc++.h>
const int Q = 100005;
using namespace std;
namespace GE {
const double eps = 1e-8;
struct Point {
  double x, y;
  Point(double X = 0, double Y = 0) : x(X), y(Y) {}
  Point operator+(const Point& rhs) const {
    return (Point){x + rhs.x, y + rhs.y};
  }
  Point operator-(const Point& rhs) const {
    return (Point){x - rhs.x, y - rhs.y};
  }
};
Point basic;
inline double cross(Point a, Point b) { return a.x * b.y - a.y * b.x; }
inline double dis(Point x, Point y) {
  return sqrt((x.x - y.x) * (x.x - y.x) + (x.y - y.y) * (x.y - y.y));
}
bool operator<(Point rhs1, Point rhs2) {
  rhs1 = rhs1 - basic;
  rhs2 = rhs2 - basic;
  const double ang1 = atan2(rhs1.y, rhs1.x), ang2 = atan2(rhs2.y, rhs2.x);
  return fabs(ang1 - ang2) > eps ? ang1 < ang2
                                 : (dis(rhs1, Point()) < dis(rhs2, Point()));
}
set<Point> S;
inline set<Point>::iterator Pre(set<Point>::iterator it) {
  if (it == S.begin()) it = S.end();
  return --it;
}
inline set<Point>::iterator Nxt(set<Point>::iterator it) {
  ++it;
  return it == S.end() ? S.begin() : it;
}
inline int query(Point x) {
  set<Point>::iterator it = S.lower_bound(x);
  if (it == S.end()) it = S.begin();
  return cross(x - *Pre(it), *it - *Pre(it)) < eps;
}
inline void Insert(Point x) {
  if (query(x)) return;
  S.insert(x);
  set<Point>::iterator it = Nxt(S.find(x));
  while (S.size() > 3 && cross(x - *Nxt(it), *it - *Nxt(it)) < eps)
    S.erase(it), it = Nxt(S.find(x));
  it = Pre(S.find(x));
  while (S.size() > 3 && cross(x - *it, *it - *Pre(it)) > -eps)
    S.erase(it), it = Pre(S.find(x));
}
}  // namespace GE
using namespace GE;
int n;
Point A[5];
inline void YES() {
  putchar('Y');
  putchar('E');
  putchar('S');
  putchar('\n');
}
inline void NO() {
  putchar('N');
  putchar('O');
  putchar('\n');
}
signed main() {
  scanf("%d", &n);
  for (register int i = 1; i <= 3; ++i) {
    int opt;
    scanf("%d%lf%lf", &opt, &A[i].x, &A[i].y);
    basic = basic + A[i];
  }
  basic.x /= 3;
  basic.y /= 3;
  for (register int i = 1; i <= 3; ++i) S.insert(A[i]);
  for (register int i = 4; i <= n; ++i) {
    int opt;
    double x, y;
    scanf("%d%lf%lf", &opt, &x, &y);
    if (opt == 1)
      Insert(Point(x, y));
    else
      query(Point(x, y)) ? YES() : NO();
  }
  return 0;
}
