#include <bits/stdc++.h>
using namespace std;
const double Pi = acos(-1);
struct Point {
  double x, y;
  Point(double _x = 0, double _y = 0) : x(_x), y(_y) {}
  Point operator+(const Point &p) const { return Point(x + p.x, y + p.y); }
  Point operator-(const Point &p) const { return Point(x - p.x, y - p.y); }
  double operator*(const Point &p) const { return x * p.y - y * p.x; }
  double atan() {
    double tmp = atan2(y, x);
    return tmp < 0 ? tmp + 2 * Pi : tmp;
  }
} p[100005];
set<pair<double, int> > S;
int n, op, m = 4;
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= 3; i++)
    scanf("%d%lf%lf", &op, &p[i].x, &p[i].y), p[0] = p[0] + p[i];
  p[0].x /= 3, p[0].y /= 3;
  for (int i = 1; i <= 3; i++) S.insert(make_pair((p[i] - p[0]).atan(), i));
  for (int i = 4; i <= n; i++) {
    scanf("%d%lf%lf", &op, &p[m].x, &p[m].y);
    double sita = (p[m] - p[0]).atan();
    pair<double, int> now = make_pair(sita, m);
    set<pair<double, int> >::iterator pre = S.lower_bound(now), nxt = pre;
    if (nxt == S.end()) nxt = S.begin();
    if (pre == S.begin()) pre = S.end();
    pre--;
    if (op == 1) {
      if ((p[(*nxt).second] - p[(*pre).second]) * (p[m] - p[(*pre).second]) >=
          0)
        continue;
      set<pair<double, int> >::iterator nxx = nxt;
      nxx++;
      if (nxx == S.end()) nxx = S.begin();
      while ((p[(*nxt).second] - p[m]) * (p[(*nxx).second] - p[m]) <= 0) {
        S.erase(nxt), nxt = nxx;
        nxx++;
        if (nxx == S.end()) nxx = S.begin();
      }
      set<pair<double, int> >::iterator prr = pre;
      if (prr == S.begin()) prr = S.end();
      prr--;
      while ((p[(*pre).second] - p[(*prr).second]) *
                 (p[m] - p[(*prr).second]) <=
             0) {
        S.erase(pre), pre = prr;
        if (prr == S.begin()) prr = S.end();
        prr--;
      }
      S.insert(now), m++;
    }
    if (op == 2) {
      if ((p[(*nxt).second] - p[(*pre).second]) * (p[m] - p[(*pre).second]) >=
          0)
        puts("YES");
      else
        puts("NO");
    }
  }
}
