#include <bits/stdc++.h>
using namespace std;
inline int sign(long long first) { return first < 0 ? -1 : int(first > 0); }
struct point {
  int first, second;
  point() : first(0), second(0) {}
  point(const int &first, const int &second) : first(first), second(second) {}
  point(const map<int, int>::iterator &p)
      : first(p->first), second(p->second) {}
  friend point operator-(const point &a, const point &b) {
    return point(a.first - b.first, a.second - b.second);
  }
  friend long long det(const point &a, const point &b) {
    return (long long)a.first * b.second - (long long)a.second * b.first;
  }
};
bool checkInside(map<int, int> &a, const point &p) {
  int first = p.first, second = p.second;
  map<int, int>::iterator p1 = a.lower_bound(first);
  if (p1 == a.end()) return false;
  if (p1->first == first) return second <= p1->second;
  if (p1 == a.begin()) return false;
  map<int, int>::iterator p2(p1--);
  return sign(det(p - point(p1), point(p2) - p)) >= 0;
}
void addPoint(map<int, int> &a, const point &p) {
  int first = p.first, second = p.second;
  assert(!checkInside(a, p));
  map<int, int>::iterator pnt = a.insert(make_pair(first, second)).first, p1,
                          p2;
  pnt->second = second;
  for (;; a.erase(p2)) {
    p1 = pnt;
    if (++p1 == a.end()) break;
    p2 = p1;
    if (++p1 == a.end()) break;
    if (det(point(p2) - p, point(p1) - point(p2)) < 0) break;
  }
  for (;; a.erase(p2)) {
    p1 = pnt;
    if (p1 == a.begin()) break;
    --p1;
    if (p1 == a.begin()) break;
    p2 = p1--;
    if (det(point(p2) - p, point(p1) - point(p2)) > 0) break;
  }
}
int main() {
  int N, t, first, second;
  map<int, int> upperHull, lowerHull;
  scanf("%d", &N);
  for (int i = 1; i <= N; ++i) {
    scanf("%d %d %d", &t, &first, &second);
    if (t == 1) {
      if (!checkInside(upperHull, point(first, second)))
        addPoint(upperHull, point(first, second));
      if (!checkInside(lowerHull, point(first, -second)))
        addPoint(lowerHull, point(first, -second));
    } else {
      if (checkInside(upperHull, point(first, second)) &&
          checkInside(lowerHull, point(first, -second)))
        puts("YES");
      else
        puts("NO");
    }
  }
  return 0;
}
