#include <bits/stdc++.h>
using namespace std;
struct point {
  int x, y;
};
point operator+(point a, point b) { return (point){a.x + b.x, a.y + b.y}; }
point operator-(point a, point b) { return (point){a.x - b.x, a.y - b.y}; }
long long operator*(point a, point b) {
  return (long long)a.x * b.x + (long long)a.y * b.y;
}
long long operator/(point a, point b) {
  return (long long)a.x * b.y - (long long)a.y * b.x;
}
int area(point A) {
  if (A.x > 0 && A.y >= 0) return 1;
  if (A.x <= 0 && A.y > 0) return 2;
  if (A.x < 0 && A.y <= 0) return 3;
  if (A.x >= 0 && A.y < 0) return 4;
  return 0;
}
struct cmp {
  bool operator()(const point &a, const point &b) {
    int A = area(a), B = area(b);
    if (A < B) return true;
    if (A > B) return false;
    return a / b > 0;
  }
};
int n;
set<point, cmp> con;
set<point, cmp>::iterator iB, iC, iD;
set<point, cmp>::iterator nex(set<point, cmp>::iterator it) {
  it++;
  return (it == con.end()) ? con.begin() : it;
}
set<point, cmp>::iterator pre(set<point, cmp>::iterator it) {
  if (it == con.begin()) it = con.end();
  return --it;
}
bool in(point A) {
  point B, C;
  iB = con.upper_bound(A);
  if (iB == con.end()) iB = con.begin();
  iC = con.upper_bound(A);
  iC = pre(iC);
  B = *iB, C = *iC;
  return (A - B) / (C - A) >= 0;
}
int main() {
  int i, order;
  point A, B, C, D, O;
  scanf("%d\n", &n);
  scanf("1 %d %d\n", &A.x, &A.y);
  scanf("1 %d %d\n", &B.x, &B.y);
  scanf("1 %d %d\n", &C.x, &C.y);
  A = (point){A.x * 3, A.y * 3};
  B = (point){B.x * 3, B.y * 3};
  C = (point){C.x * 3, C.y * 3};
  O = (point){(A.x + B.x + C.x) / 3, (A.y + B.y + C.y) / 3};
  con.insert(A - O);
  con.insert(B - O);
  con.insert(C - O);
  for (set<point, cmp>::iterator it = con.begin(); it != con.end(); ++it)
    cerr << (*it).x << " " << (*it).y << endl;
  for (i = 4; i <= n; ++i) {
    scanf("%d %d %d", &order, &A.x, &A.y);
    A = (point){A.x * 3, A.y * 3};
    A = A - O;
    if (order == 1) {
      if (!in(A)) {
        while (true) {
          iD = nex(iB);
          D = *iD;
          B = *iB;
          if ((B - A) / (D - B) > 0)
            break;
          else
            con.erase(iB), iB = iD;
        }
        while (true) {
          iD = pre(iC);
          D = *iD;
          C = *iC;
          if ((C - A) / (D - C) < 0)
            break;
          else
            con.erase(iC), iC = iD;
        }
        con.insert(A);
      }
    } else {
      if (in(A))
        printf("YES\n");
      else
        printf("NO\n");
    }
  }
  return 0;
}
