#include <bits/stdc++.h>
using namespace std;
double helen(double a, double b, double c) {
  double p = (a + b + c) / 2;
  return sqrt(p * (p - a) * (p - b) * (p - c));
}
struct point {
  double x, y;
  point() {}
  point(double x, double y) : x(x), y(y) {}
  void sf() { scanf("%lf %lf", &x, &y); }
} p[100008];
struct node {
  double apha;
  int id;
  node() {}
  node(double a, int b) : apha(a), id(b) {}
  bool operator<(const node &b) const {
    return apha < b.apha || apha == b.apha && id < b.id;
  }
};
set<node> s;
int t[100008];
double cx, cy;
int cross(point p1, point p2, point p3) {
  double ret = (p2.x - p1.x) * (p3.y - p2.y) - (p2.y - p1.y) * (p3.x - p2.x);
  if (ret > 0) return 1;
  if (ret < 0) return -1;
  return 0;
}
node topi(int i) {
  double apha = atan2(p[i].y - cy, p[i].x - cx);
  return node(apha, i);
}
node pre(node pp) {
  set<node>::iterator it;
  it = s.lower_bound(pp);
  if (it == s.begin())
    it = --s.end();
  else
    it--;
  return *it;
}
node next(node pp) {
  set<node>::iterator it;
  it = s.upper_bound(pp);
  if (it == s.end()) it = s.begin();
  return *it;
}
int main() {
  int n;
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    scanf("%d", &t[i]);
    p[i].sf();
  }
  for (int i = 0; i < 3; i++) {
    cx += p[i].x;
    cy += p[i].y;
  }
  cx /= 3.0;
  cy /= 3.0;
  for (int i = 0; i < 3; i++) {
    s.insert(topi(i));
  }
  for (int i = 3; i < n; i++) {
    if (t[i] == 2) {
      node kk = topi(i);
      node p1 = pre(kk);
      node p2 = next(kk);
      if (cross(p[p1.id], p[i], p[p2.id]) <= 0) {
        printf("YES\n");
      } else {
        printf("NO\n");
      }
    } else {
      node kk = topi(i);
      node p1 = pre(kk);
      node p2 = next(kk);
      if (cross(p[p1.id], p[i], p[p2.id]) <= 0)
        continue;
      else {
        p1 = next(kk);
        while (1) {
          p2 = next(p1);
          if (cross(p[i], p[p1.id], p[p2.id]) <= 0) {
            s.erase(p1);
            p1 = p2;
          } else
            break;
        }
        p1 = pre(kk);
        while (1) {
          p2 = pre(p1);
          if (cross(p[p2.id], p[p1.id], p[i]) <= 0) {
            s.erase(p1);
            p1 = p2;
          } else
            break;
        }
        s.insert(kk);
      }
    }
  }
}
